Implementing xzoomreset. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit dc8c5c82aa14e75305bd5b0e42b4f8bba45702a8
 (DIR) parent c7a945c4086ab913cd8a05997bfbc1906645eff4
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Mon, 29 Sep 2014 15:38:21 +0200
       
       Implementing xzoomreset.
       
       Thanks mvdan@mvdan.cc for proposing this.
       
       Diffstat:
         M config.def.h                        |       1 +
         M st.c                                |      25 ++++++++++++++++++++++++-
       
       2 files changed, 25 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       @@ -116,6 +116,7 @@ static Shortcut shortcuts[] = {
                { XK_ANY_MOD,           XK_Print,       printsel,       {.i =  0} },
                { MODKEY|ShiftMask,     XK_Prior,       xzoom,          {.i = +1} },
                { MODKEY|ShiftMask,     XK_Next,        xzoom,          {.i = -1} },
       +        { MODKEY|ShiftMask,     XK_Home,        xzoomreset,     {.i =  0}  },
                { ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
                { MODKEY|ShiftMask,     XK_Insert,      clippaste,      {.i =  0} },
                { MODKEY,               XK_Num_Lock,    numlock,        {.i =  0} },
 (DIR) diff --git a/st.c b/st.c
       @@ -317,6 +317,8 @@ static void clippaste(const Arg *);
        static void numlock(const Arg *);
        static void selpaste(const Arg *);
        static void xzoom(const Arg *);
       +static void xzoomabs(const Arg *);
       +static void xzoomreset(const Arg *);
        static void printsel(const Arg *);
        static void printscreen(const Arg *) ;
        static void toggleprinter(const Arg *);
       @@ -503,6 +505,7 @@ static int oldbutton = 3; /* button event on startup: 3 = release */
        
        static char *usedfont = NULL;
        static double usedfontsize = 0;
       +static double defaultfontsize = 0;
        
        static uchar utfbyte[UTF_SIZ + 1] = {0x80,    0, 0xC0, 0xE0, 0xF0};
        static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
       @@ -2993,6 +2996,7 @@ xloadfonts(char *fontstr, double fontsize) {
                                FcPatternAddDouble(pattern, FC_PIXEL_SIZE, 12);
                                usedfontsize = 12;
                        }
       +                defaultfontsize = usedfontsize;
                }
        
                FcConfigSubstitute(0, pattern, FcMatchPattern);
       @@ -3005,6 +3009,8 @@ xloadfonts(char *fontstr, double fontsize) {
                        FcPatternGetDouble(dc.font.match->pattern,
                                           FC_PIXEL_SIZE, 0, &fontval);
                        usedfontsize = fontval;
       +                if(fontsize == 0)
       +                        defaultfontsize = fontval;
                }
        
                /* Setting character width and height. */
       @@ -3058,16 +3064,33 @@ xunloadfonts(void) {
                xunloadfont(&dc.ibfont);
        }
        
       +
        void
        xzoom(const Arg *arg) {
       +        Arg larg;
       +        larg.i = usedfontsize + arg->i;
       +        xzoomabs(&larg);
       +}
       +
       +void
       +xzoomabs(const Arg *arg) {
                xunloadfonts();
       -        xloadfonts(usedfont, usedfontsize + arg->i);
       +        xloadfonts(usedfont, arg->i);
                cresize(0, 0);
                redraw(0);
                xhints();
        }
        
        void
       +xzoomreset(const Arg *arg) {
       +        Arg larg;
       +        if(defaultfontsize > 0) {
       +                larg.i = defaultfontsize;
       +                xzoomabs(&larg);
       +        }
       +}
       +
       +void
        xinit(void) {
                XGCValues gcvalues;
                Cursor cursor;