165 lines · 6.3 KB · C
RawDownload
/* This file is part of Zutty. * Copyright (C) 2020 Tom Szilagyi * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * See the file LICENSE for the full license. */ #pragma once #include "base.h" #include <X11/Xresource.h> #include <cstdint>#include <string>#include <vector> namespace zutty{   struct OptionDesc   {      const char* option;      XrmOptionKind parseType;      const char* implValue;      const char* hardDefault;      const char* helpDescr;   };    struct ResourceDesc   {      const char* resource;      const char* hardDefault;      const char* helpDescr;   }; #if defined(FREEBSD)   static constexpr const char* fontpath = "/usr/local/share/fonts";#elif defined(NETBSD)   static constexpr const char* fontpath = "/usr/X11R7/lib/X11/fonts";#elif defined(OPENBSD)   static constexpr const char* fontpath = "/usr/X11R6/lib/X11/fonts";#else   static constexpr const char* fontpath = "/usr/share/fonts";#endif #define NoArg  XrmoptionNoArg#define SepArg XrmoptionSepArg#define SkipLn XrmoptionSkipLine   static const std::vector <OptionDesc> optionsTable = {      // option       parseType implValue hardDefault helpDescr      {"altScroll",   NoArg,    "true",    "false",   "Alternate scroll mode"},      {"autoCopy",    NoArg,    "true",    "false",   "Sync primary to clipboard"},      {"bg",          SepArg,   nullptr,   "#000",    "Background color"},      {"boldColors",  NoArg,    "true",    "true",    "Enable bright for bold"},      {"border",      SepArg,   nullptr,   "2",       "Border width in pixels"},      {"cr",          SepArg,   nullptr,   nullptr,   "Cursor color"},      {"display",     SepArg,   nullptr,   nullptr,   "Display to connect to"},      {"dwfont",      SepArg,   nullptr,   "18x18ja", "Double-width font to use"},      {"fg",          SepArg,   nullptr,   "#fff",    "Foreground color"},      {"font",        SepArg,   nullptr,   "9x18",    "Font to use"},      {"fontsize",    SepArg,   nullptr,   "16",      "Font size"},      {"fontpath",    SepArg,   nullptr,   fontpath,  "Font search path"},      {"geometry",    SepArg,   nullptr,   "80x24",   "Terminal size in chars"},      {"glinfo",      NoArg,    "true",    "false",   "Print OpenGL information"},      {"help",        NoArg,    "true",    "false",   "Print usage listing and quit"},      {"listres",     NoArg,    "true",    "false",   "Print resource listing and quit"},      {"login",       NoArg,    "true",    "false",   "Start shell as a login shell"},      {"name",        SepArg,   nullptr,   nullptr,   "Instance name for Xrdb and WM_CLASS"},      {"rv",          NoArg,    "true",    "false",   "Reverse video"},      {"saveLines",   SepArg,   nullptr,   "500",     "Lines of scrollback history"},      {"shell",       SepArg,   nullptr,   nullptr,   "Shell program to run"},      {"showWraps",   NoArg,    "true",    "false",   "Show wrap marks at right margin"},      {"title",       SepArg,   nullptr,   "Zutty",   "Window title"},      {"quiet",       NoArg,    "true",    "false",   "Silence logging output"},      {"verbose",     NoArg,    "true",    "false",   "Output info messages"},      {"e",           SkipLn,   nullptr,   nullptr,   "Command line to run"},   };#undef NoArg#undef SepArg#undef SkipL    static const std::vector <ResourceDesc> resourceTable = {      // resource           hardDefault    helpDescr      {"altSendsEscape",    "true",        "Encode Alt key as ESC prefix"},      {"bellIsAudible",     "true",        "Invoke audible bell (XBell) on ^G"},      {"bellIsUrgent",      "false",       "Signal bell to WM as Urgency Hint"},      {"modifyOtherKeys",   "1",           "Key modifier encoding level; 0..2"},      {"color0",            "#000000",     "Palette color 0"},      {"color1",            "#cd0000",     "Palette color 1"},      {"color2",            "#00cd00",     "Palette color 2"},      {"color3",            "#cdcd00",     "Palette color 3"},      {"color4",            "#0000ee",     "Palette color 4"},      {"color5",            "#cd00cd",     "Palette color 5"},      {"color6",            "#00cdcd",     "Palette color 6"},      {"color7",            "#e5e5e5",     "Palette color 7"},      {"color8",            "#7f7f7f",     "Palette color 8"},      {"color9",            "#ff0000",     "Palette color 9"},      {"color10",           "#00ff00",     "Palette color 10"},      {"color11",           "#ffff00",     "Palette color 11"},      {"color12",           "#5c5cff",     "Palette color 12"},      {"color13",           "#ff00ff",     "Palette color 13"},      {"color14",           "#00ffff",     "Palette color 14"},      {"color15",           "#ffffff",     "Palette color 15"},   };    enum class OptionSource   {  // in order of increasing precedence:      NONE, HardDefault, ResourceCfg, CmdLine   };    struct Options   {      // N.B.: no static initializers - will decode hardDefault fields above!      uint8_t fontsize;      uint8_t modifyOtherKeys;      uint16_t border;      uint16_t nCols;      uint16_t nRows;      uint16_t saveLines;      const char* display;      const char* dwfontname;      const char* fontname;      const char* fontpath;      const char* name;      const char* shell;      const char* title;      OptionSource titleSource = OptionSource::NONE;      Color bg;      Color cr;      Color fg;      bool altScrollMode;      bool altSendsEscape;      bool autoCopyMode;      bool bellIsAudible;      bool bellIsUrgent;      bool boldColors;      bool glinfo;      bool login;      bool showWraps;      bool quiet;      bool rv;      bool verbose;       void initialize (int* argc, char** argv);      void setDisplay (Display* dpy);      void handlePrintOpts ();      void parse ();       void printVersion () const;      void printUsage () const;      void printResources () const;       // getters for resources not automatically parsed by parse ()      bool getBool (const char* name, bool defaultValue = false);      void getColor (const char* name, zutty::Color& outColor);      int getInteger (const char* name, int min, int max);   }; } // namespace zutty extern zutty::Options opts;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t