X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=05585937dd19b023d51c7e7800f595b366316f0a;hb=9d1495f9eeee993a480c7ab1755803d081d794e6;hp=7dbd87a5dc96d5b4bf0d40fd55922a8036394868;hpb=6524f022f7d1d32f43208254e12f934bf64ed559;p=st.git diff --git a/st.c b/st.c index 7dbd87a..0558593 100644 --- a/st.c +++ b/st.c @@ -1,4 +1,4 @@ -/* See LICENSE for licence details. */ +/* See LICENSE for license details. */ #include #include #include @@ -419,7 +419,6 @@ static int xsetcolorname(int, const char *); static int xgeommasktogravity(int); static int xloadfont(Font *, FcPattern *); static void xloadfonts(char *, double); -static int xloadfontset(Font *); static void xsettitle(char *); static void xresettitle(void); static void xsetpointermotion(int); @@ -945,7 +944,7 @@ getsel(void) { ptr = str = xmalloc(bufsize); /* append every set & selected glyph to the selection */ - for(y = sel.nb.y; y < sel.ne.y + 1; y++) { + for(y = sel.nb.y; y <= sel.ne.y; y++) { linelen = tlinelen(y); if(sel.type == SEL_RECTANGULAR) { @@ -2770,7 +2769,6 @@ tresize(int col, int row) { int i; int minrow = MIN(row, term.row); int mincol = MIN(col, term.col); - int slide = term.c.y - row + 1; bool *bp; TCursor c; @@ -2780,20 +2778,18 @@ tresize(int col, int row) { return; } - /* free unneeded rows */ - i = 0; - if(slide > 0) { - /* - * slide screen to keep cursor where we expect it - - * tscrollup would work here, but we can optimize to - * memmove because we're freeing the earlier lines - */ - for(/* i = 0 */; i < slide; i++) { - free(term.line[i]); - free(term.alt[i]); - } - memmove(term.line, term.line + slide, row * sizeof(Line)); - memmove(term.alt, term.alt + slide, row * sizeof(Line)); + /* + * slide screen to keep cursor where we expect it - + * tscrollup would work here, but we can optimize to + * memmove because we're freeing the earlier lines + */ + for(i = 0; i <= term.c.y - row; i++) { + free(term.line[i]); + free(term.alt[i]); + } + if(i > 0) { + memmove(term.line, term.line + i, row * sizeof(Line)); + memmove(term.alt, term.alt + i, row * sizeof(Line)); } for(i += row; i < term.row; i++) { free(term.line[i]); @@ -3116,15 +3112,6 @@ xloadfonts(char *fontstr, double fontsize) { FcPatternDestroy(pattern); } -int -xloadfontset(Font *f) { - FcResult result; - - if(!(f->set = FcFontSort(0, f->pattern, FcTrue, 0, &result))) - return 1; - return 0; -} - void xunloadfont(Font *f) { XftFontClose(xw.dpy, f->match); @@ -3472,7 +3459,8 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { /* Nothing was found. */ if(i >= frclen) { if(!font->set) - xloadfontset(font); + font->set = FcFontSort(0, font->pattern, + FcTrue, 0, &fcres); fcsets[0] = font->set; /* @@ -3600,15 +3588,15 @@ xdrawcursor(void) { case 4: /* Steady Underline */ XftDrawRect(xw.draw, &dc.col[defaultcs], borderpx + curx * xw.cw, - borderpx + (term.c.y + 1) * xw.ch - 1, - xw.cw, 1); + borderpx + (term.c.y + 1) * xw.ch - cursorthickness, + xw.cw, cursorthickness); break; case 5: /* Blinking bar */ case 6: /* Steady bar */ XftDrawRect(xw.draw, &dc.col[defaultcs], - borderpx + curx * xw.cw, - borderpx + term.c.y * xw.ch, - 1, xw.ch); + borderpx + curx * xw.cw, + borderpx + term.c.y * xw.ch, + cursorthickness, xw.ch); break; } } else { @@ -3926,17 +3914,13 @@ run(void) { long deltatime; /* Waiting for window mapping */ - while(1) { + do { XNextEvent(xw.dpy, &ev); - if(XFilterEvent(&ev, None)) - continue; if(ev.type == ConfigureNotify) { w = ev.xconfigure.width; h = ev.xconfigure.height; - } else if(ev.type == MapNotify) { - break; } - } + } while(ev.type != MapNotify); ttynew(); cresize(w, h); @@ -4081,7 +4065,7 @@ main(int argc, char *argv[]) { run: setlocale(LC_CTYPE, ""); XSetLocaleModifiers(""); - tnew(cols? cols : 1, rows? rows : 1); + tnew(MAX(cols, 1), MAX(rows, 1)); xinit(); selinit(); run();