X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=67fa7902cf5802a1d5e9f888bfd94e51799b3a61;hb=950ff21e17af487b205ea0b666be015790114fa7;hp=d7a0fedfff73185851e16f1c9f1e09293f0b4a1a;hpb=abe85c0e997ed1882c69bde511f7e2746f68d9ab;p=st.git diff --git a/st.c b/st.c index d7a0fed..67fa790 100644 --- a/st.c +++ b/st.c @@ -96,8 +96,7 @@ enum cursor_movement { enum cursor_state { CURSOR_DEFAULT = 0, - CURSOR_HIDE = 1, - CURSOR_WRAPNEXT = 2 + CURSOR_WRAPNEXT = 1, }; enum glyph_state { @@ -115,7 +114,8 @@ enum term_mode { MODE_MOUSEMOTION = 64, MODE_MOUSE = 32|64, MODE_REVERSE = 128, - MODE_KBDLOCK = 256 + MODE_KBDLOCK = 256, + MODE_HIDE = 512 }; enum escape_state { @@ -673,6 +673,10 @@ bpress(XEvent *e) { sel.mode = 1; sel.ex = sel.bx = x2col(e->xbutton.x); sel.ey = sel.by = y2row(e->xbutton.y); + } else if(e->xbutton.button == Button4) { + ttywrite("\031", 1); + } else if(e->xbutton.button == Button5) { + ttywrite("\005", 1); } } @@ -1460,8 +1464,8 @@ tsetmode(bool priv, bool set, int *args, int narg) { case 0: /* Error (IGNORED) */ case 12: /* att610 -- Start blinking cursor (IGNORED) */ break; - case 25: - MODBIT(term.c.state, !set, CURSOR_HIDE); + case 25: /* DECTCEM -- Text Cursor Enable Mode */ + MODBIT(term.mode, !set, MODE_HIDE); break; case 1000: /* 1000,1002: enable xterm mouse report */ MODBIT(term.mode, set, MODE_MOUSEBTN); @@ -1834,8 +1838,8 @@ tputc(char *c, int len) { } } /* - * STR sequences must be checked before of anything - * because it can use some control codes as part of the sequence + * STR sequences must be checked before anything else + * because it can use some control codes as part of the sequence. */ if(term.esc & ESC_STR) { switch(ascii) { @@ -1855,6 +1859,7 @@ tputc(char *c, int len) { } return; } + /* * Actions of control codes must be performed as soon they arrive * because they can be embedded inside a control sequence, and @@ -1895,11 +1900,11 @@ tputc(char *c, int len) { case '\030': /* CAN */ csireset(); return; - case '\005': /* ENQ (IGNORED) */ - case '\000': /* NUL (IGNORED) */ - case '\021': /* XON (IGNORED) */ - case '\023': /* XOFF (IGNORED) */ - case 0177: /* DEL (IGNORED) */ + case '\005': /* ENQ (IGNORED) */ + case '\000': /* NUL (IGNORED) */ + case '\021': /* XON (IGNORED) */ + case '\023': /* XOFF (IGNORED) */ + case 0177: /* DEL (IGNORED) */ return; } } else if(term.esc & ESC_START) { @@ -2398,9 +2403,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { *temp, revfg, revbg; XRenderColor colfg, colbg; - if(base.mode & ATTR_REVERSE) - temp = fg, fg = bg, bg = temp; - if(base.mode & ATTR_BOLD) { if(BETWEEN(base.fg, 0, 7)) { /* basic system colors */ @@ -2423,7 +2425,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { if(base.mode & ATTR_ITALIC) font = &dc.ifont; - if(base.mode & (ATTR_ITALIC|ATTR_BOLD)) + if((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) font = &dc.ibfont; if(IS_SET(MODE_REVERSE)) { @@ -2450,6 +2452,9 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { } } + if(base.mode & ATTR_REVERSE) + temp = fg, fg = bg, bg = temp; + XftTextExtentsUtf8(xw.dpy, font->xft_set, (FcChar8 *)s, bytelen, &extents); width = extents.xOff; @@ -2500,7 +2505,7 @@ xdrawcursor(void) { } /* draw the new one */ - if(!(term.c.state & CURSOR_HIDE)) { + if(!(IS_SET(MODE_HIDE))) { if(!(xw.state & WIN_FOCUSED)) g.bg = defaultucs; @@ -2694,6 +2699,9 @@ kpress(XEvent *ev) { selpaste(); break; case XK_Return: + if(meta) + ttywrite("\033", 1); + if(IS_SET(MODE_CRLF)) { ttywrite("\r\n", 2); } else { @@ -2742,8 +2750,6 @@ cresize(int width, int height) col = (xw.w - 2*borderpx) / xw.cw; row = (xw.h - 2*borderpx) / xw.ch; - if(col == term.col && row == term.row) - return; tresize(col, row); xresize(col, row);