st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit dc8c5c82aa14e75305bd5b0e42b4f8bba45702a8
parent c7a945c4086ab913cd8a05997bfbc1906645eff4
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:
Mconfig.def.h | 1+
Mst.c | 25++++++++++++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
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} },
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;