URI: 
       dwm-vtcolors-6.2.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       dwm-vtcolors-6.2.diff (8073B)
       ---
            1 Author: Chris Noxz <chris@noxz.tech>
            2 
            3 diff -up ../dwm-6.2/config.def.h ./config.def.h
            4 --- ../dwm-6.2/config.def.h        2019-02-02 13:55:28.000000000 +0100
            5 +++ ./config.def.h        2020-02-02 10:56:38.865583817 +0100
            6 @@ -12,10 +12,27 @@ static const char col_gray2[]       = "#
            7  static const char col_gray3[]       = "#bbbbbb";
            8  static const char col_gray4[]       = "#eeeeee";
            9  static const char col_cyan[]        = "#005577";
           10 -static const char *colors[][3]      = {
           11 -        /*               fg         bg         border   */
           12 -        [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
           13 -        [SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
           14 +static const char title_bg_dark[]   = "#303030";
           15 +static const char title_bg_light[]  = "#fdfdfd";
           16 +static const int color_ptrs[][3]    = {
           17 +        /*                              fg         bg         border    */
           18 +        [SchemeNorm]                = { -1,        -1,        5 },
           19 +        [SchemeSel]                 = { -1,        -1,        11 },
           20 +        [SchemeTagsNorm]            = { 2,         0,         0 },
           21 +        [SchemeTagsSel]             = { 6,         5,         5 },
           22 +        [SchemeTitleNorm]           = { 6,         -1,        -1 },
           23 +        [SchemeTitleSel]            = { 6,         -1,        -1 },
           24 +        [SchemeStatus]              = { 2,         0,         0 },
           25 +};
           26 +static char colors[][3][8]          = {
           27 +        /*                              fg         bg         border    */
           28 +        [SchemeNorm]                = { "#000000", "#000000", "#000000" },
           29 +        [SchemeSel]                 = { "#000000", "#000000", "#000000" },
           30 +        [SchemeTagsNorm]            = { "#000000", "#000000", "#000000" },
           31 +        [SchemeTagsSel]             = { "#000000", "#000000", "#000000" },
           32 +        [SchemeTitleNorm]           = { "#000000", "#000000", "#000000" },
           33 +        [SchemeTitleSel]            = { "#000000", "#000000", "#000000" },
           34 +        [SchemeStatus]              = { "#000000", "#000000", "#000000" },
           35  };
           36  
           37  /* tagging */
           38 diff -up ../dwm-6.2/drw.c ./drw.c
           39 --- ../dwm-6.2/drw.c        2019-02-02 13:55:28.000000000 +0100
           40 +++ ./drw.c        2020-02-02 10:37:08.885745829 +0100
           41 @@ -193,7 +193,7 @@ drw_fontset_free(Fnt *font)
           42  }
           43  
           44  void
           45 -drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
           46 +drw_clr_create(Drw *drw, Clr *dest, const char clrname[])
           47  {
           48          if (!drw || !dest || !clrname)
           49                  return;
           50 @@ -207,7 +207,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons
           51  /* Wrapper to create color schemes. The caller has to call free(3) on the
           52   * returned color scheme when done using it. */
           53  Clr *
           54 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
           55 +drw_scm_create(Drw *drw, char clrnames[][8], size_t clrcount)
           56  {
           57          size_t i;
           58          Clr *ret;
           59 diff -up ../dwm-6.2/drw.h ./drw.h
           60 --- ../dwm-6.2/drw.h        2019-02-02 13:55:28.000000000 +0100
           61 +++ ./drw.h        2020-02-02 10:37:00.558746075 +0100
           62 @@ -38,8 +38,8 @@ unsigned int drw_fontset_getwidth(Drw *d
           63  void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
           64  
           65  /* Colorscheme abstraction */
           66 -void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
           67 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
           68 +void drw_clr_create(Drw *drw, Clr *dest, const char clrname[]);
           69 +Clr *drw_scm_create(Drw *drw, char clrnames[][8], size_t clrcount);
           70  
           71  /* Cursor abstraction */
           72  Cur *drw_cur_create(Drw *drw, int shape);
           73 diff -up ../dwm-6.2/dwm.c ./dwm.c
           74 --- ../dwm-6.2/dwm.c        2019-02-02 13:55:28.000000000 +0100
           75 +++ ./dwm.c        2020-02-02 10:57:40.659581991 +0100
           76 @@ -59,7 +59,7 @@
           77  
           78  /* enums */
           79  enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
           80 -enum { SchemeNorm, SchemeSel }; /* color schemes */
           81 +enum { SchemeNorm, SchemeSel, SchemeTagsNorm, SchemeTagsSel, SchemeTitleNorm, SchemeTitleSel, SchemeStatus }; /* color schemes */
           82  enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
           83         NetWMFullscreen, NetActiveWindow, NetWMWindowType,
           84         NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
           85 @@ -201,6 +201,8 @@ static void setfocus(Client *c);
           86  static void setfullscreen(Client *c, int fullscreen);
           87  static void setlayout(const Arg *arg);
           88  static void setmfact(const Arg *arg);
           89 +static void get_vt_colors(void);
           90 +static int get_luminance(char *rgb);
           91  static void setup(void);
           92  static void seturgent(Client *c, int urg);
           93  static void showhide(Client *c);
           94 @@ -703,7 +705,7 @@ drawbar(Monitor *m)
           95  
           96          /* draw status first so it can be overdrawn by tags later */
           97          if (m == selmon) { /* status is only drawn on selected monitor */
           98 -                drw_setscheme(drw, scheme[SchemeNorm]);
           99 +                drw_setscheme(drw, scheme[SchemeStatus]);
          100                  sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
          101                  drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0);
          102          }
          103 @@ -716,7 +718,7 @@ drawbar(Monitor *m)
          104          x = 0;
          105          for (i = 0; i < LENGTH(tags); i++) {
          106                  w = TEXTW(tags[i]);
          107 -                drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
          108 +                drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeTagsSel : SchemeTagsNorm]);
          109                  drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
          110                  if (occ & 1 << i)
          111                          drw_rect(drw, x + boxs, boxs, boxw, boxw,
          112 @@ -725,17 +727,17 @@ drawbar(Monitor *m)
          113                  x += w;
          114          }
          115          w = blw = TEXTW(m->ltsymbol);
          116 -        drw_setscheme(drw, scheme[SchemeNorm]);
          117 +        drw_setscheme(drw, scheme[SchemeTagsNorm]);
          118          x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
          119  
          120          if ((w = m->ww - sw - x) > bh) {
          121                  if (m->sel) {
          122 -                        drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
          123 +                        drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]);
          124                          drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
          125                          if (m->sel->isfloating)
          126                                  drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
          127                  } else {
          128 -                        drw_setscheme(drw, scheme[SchemeNorm]);
          129 +                        drw_setscheme(drw, scheme[SchemeTitleNorm]);
          130                          drw_rect(drw, x, 0, w, bh, 1, 1);
          131                  }
          132          }
          133 @@ -1527,6 +1529,72 @@ setmfact(const Arg *arg)
          134  }
          135  
          136  void
          137 +get_vt_colors(void)
          138 +{
          139 +        char *cfs[3] = {
          140 +                "/sys/module/vt/parameters/default_red",
          141 +                "/sys/module/vt/parameters/default_grn",
          142 +                "/sys/module/vt/parameters/default_blu",
          143 +        };
          144 +        char vtcs[16][8];
          145 +        char tk[] = ",";
          146 +        char cl[64];
          147 +        char *tp = NULL;
          148 +        FILE *fp;
          149 +        size_t r;
          150 +        int i, c, n;
          151 +
          152 +        for (i = 0; i < 16; i++)
          153 +                strcpy(vtcs[i], "#000000");
          154 +
          155 +        for (i = 0, r = 0; i < 3; i++) {
          156 +                if ((fp = fopen(cfs[i], "r")) == NULL)
          157 +                        continue;
          158 +                while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n')
          159 +                        r++;
          160 +                cl[r] = '\0';
          161 +                for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) {
          162 +                        if ((r = strcspn(tp, tk)) == -1)
          163 +                                break;
          164 +                        for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++)
          165 +                                n = n * 10 - 48 + *tp;
          166 +                        vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87;
          167 +                        vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87;
          168 +                }
          169 +                fclose(fp);
          170 +        }
          171 +        for (i = 0; i < LENGTH(colors); i++) {
          172 +                for (c = 0; c < 3; c++) {
          173 +                        n = color_ptrs[i][c];
          174 +                        if (n > -1 && strlen(colors[i][c]) >= strlen(vtcs[n]))
          175 +                                memcpy(colors[i][c], vtcs[n], 7);
          176 +                }
          177 +        }
          178 +}
          179 +
          180 +int get_luminance(char *r)
          181 +{
          182 +        char *c = r;
          183 +        int n[3] = {0};
          184 +        int i = 0;
          185 +
          186 +        while (*c) {
          187 +                if (*c >= 48 && *c < 58)
          188 +                        n[i / 2] = n[i / 2] * 16 - 48 + *c;
          189 +                else if (*c >= 65 && *c < 71)
          190 +                        n[i / 2] = n[i / 2] * 16 - 55 + *c;
          191 +                else if (*c >= 97 && *c < 103)
          192 +                        n[i / 2] = n[i / 2] * 16 - 87 + *c;
          193 +                else
          194 +                        i--;
          195 +                i++;
          196 +                c++;
          197 +        }
          198 +
          199 +        return (0.299 * n[0] + 0.587 * n[1] + 0.114 * n[2]) / 2.55;
          200 +}
          201 +
          202 +void
          203  setup(void)
          204  {
          205          int i;
          206 @@ -1567,6 +1635,14 @@ setup(void)
          207          cursor[CurResize] = drw_cur_create(drw, XC_sizing);
          208          cursor[CurMove] = drw_cur_create(drw, XC_fleur);
          209          /* init appearance */
          210 +        get_vt_colors();
          211 +        if (get_luminance(colors[SchemeTagsNorm][ColBg]) > 50) {
          212 +                strcpy(colors[SchemeTitleNorm][ColBg], title_bg_light);
          213 +                strcpy(colors[SchemeTitleSel][ColBg], title_bg_light);
          214 +        } else {
          215 +                strcpy(colors[SchemeTitleNorm][ColBg], title_bg_dark);
          216 +                strcpy(colors[SchemeTitleSel][ColBg], title_bg_dark);
          217 +        }
          218          scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
          219          for (i = 0; i < LENGTH(colors); i++)
          220                  scheme[i] = drw_scm_create(drw, colors[i], 3);
          221 Only in ./: dwm-vtcolors-6.2.diff
          222 Only in ./: .git
          223 Only in ./: .gitignore