diff options
| author | Shivesh Mandalia <mail@shivesh.org> | 2021-09-22 20:18:38 +0100 |
|---|---|---|
| committer | Shivesh Mandalia <mail@shivesh.org> | 2021-09-22 20:18:38 +0100 |
| commit | 9e717438a1726809e1d16cabba525d611ec5b08b (patch) | |
| tree | 1553a40cca7d5af3ec1e6e16afdfa2a56e1a1958 | |
| parent | bd93dfe113906c31b58d407a6e37786f4e7e99ab (diff) | |
| download | st-9e717438a1726809e1d16cabba525d611ec5b08b.tar.gz st-9e717438a1726809e1d16cabba525d611ec5b08b.zip | |
Blinking cursor
- Patch st-blinking_cursor-20200531-a2a7044.diffst-blinking_cursor-20200531-a2a7044.diff
<https://st.suckless.org/patches/scrollback/>
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | config.def.h | 19 | ||||
| -rw-r--r-- | config.h | 4 | ||||
| -rw-r--r-- | st.desktop | 2 | ||||
| -rw-r--r-- | x.c | 42 |
5 files changed, 51 insertions, 21 deletions
@@ -50,11 +50,12 @@ install: st tic -sx st.info @echo Please see the README file regarding the terminfo entry of st. mkdir -p $(DESTDIR)$(PREFIX)/share/applications - cp -f st.desktop $(DESTDIR)$(PREFIX)/share/applications + # Use tabbed to launch st + # cp -f st.desktop $(DESTDIR)$(PREFIX)/share/applications uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/st rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 - rm -f $(DESTDIR)$(PREFIX)/share/applications/st.desktop + # rm -f $(DESTDIR)$(PREFIX)/share/applications/st.desktop .PHONY: all options clean dist install uninstall diff --git a/config.def.h b/config.def.h index a893440..927b8dd 100644 --- a/config.def.h +++ b/config.def.h @@ -133,13 +133,20 @@ static unsigned int defaultcs = 256; static unsigned int defaultrcs = 257; /* - * Default shape of cursor - * 2: Block ("█") - * 4: Underline ("_") - * 6: Bar ("|") - * 7: Snowman ("☃") + * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-SP-q.1D81 + * Default style of cursor + * 0: Blinking block + * 1: Blinking block (default) + * 2: Steady block ("█") + * 3: Blinking underline + * 4: Steady underline ("_") + * 5: Blinking bar + * 6: Steady bar ("|") + * 7: Blinking st cursor + * 8: Steady st cursor */ -static unsigned int cursorshape = 2; +static unsigned int cursorstyle = 1; +static Rune stcursor = 0x2603; /* snowman (U+2603) */ /* * Default columns and rows numbers @@ -118,8 +118,8 @@ static const char *colorname[] = { [255] = 0, /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", + "#000000", + "#FFFFFF", "#2E3436", "#F2E3CC", }; @@ -1,7 +1,7 @@ [Desktop Entry] Name=st Comment=st is a simple terminal implementation for X -Exec=tabbed -c -r 2 st -w '' +Exec=tabbed -c -r 2 st -w '' -e /bin/bash --login Icon=utilities-terminal Terminal=false Type=Application @@ -254,6 +254,7 @@ static char *opt_name = NULL; static char *opt_title = NULL; static int oldbutton = 3; /* button event on startup: 3 = release */ +static int cursorblinks = 0; void clipcopy(const Arg *dummy) @@ -1531,16 +1532,19 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) /* draw the new one */ if (IS_SET(MODE_FOCUSED)) { switch (win.cursor) { - case 7: /* st extension */ - g.u = 0x2603; /* snowman (U+2603) */ + case 0: /* Blinking block */ + case 1: /* Blinking block (default) */ + if (IS_SET(MODE_BLINK)) + break; /* FALLTHROUGH */ - case 0: /* Blinking Block */ - case 1: /* Blinking Block (Default) */ - case 2: /* Steady Block */ + case 2: /* Steady block */ xdrawglyph(g, cx, cy); break; - case 3: /* Blinking Underline */ - case 4: /* Steady Underline */ + case 3: /* Blinking underline */ + if (IS_SET(MODE_BLINK)) + break; + /* FALLTHROUGH */ + case 4: /* Steady underline */ XftDrawRect(xw.draw, &drawcol, borderpx + cx * win.cw, borderpx + (cy + 1) * win.ch - \ @@ -1548,12 +1552,23 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) win.cw, cursorthickness); break; case 5: /* Blinking bar */ + if (IS_SET(MODE_BLINK)) + break; + /* FALLTHROUGH */ case 6: /* Steady bar */ XftDrawRect(xw.draw, &drawcol, borderpx + cx * win.cw, borderpx + cy * win.ch, cursorthickness, win.ch); break; + case 7: /* Blinking st cursor */ + if (IS_SET(MODE_BLINK)) + break; + /* FALLTHROUGH */ + case 8: /* Steady st cursor */ + g.u = stcursor; + xdrawglyph(g, cx, cy); + break; } } else { XftDrawRect(xw.draw, &drawcol, @@ -1710,9 +1725,12 @@ xsetmode(int set, unsigned int flags) int xsetcursor(int cursor) { - if (!BETWEEN(cursor, 0, 7)) /* 7: st extension */ + if (!BETWEEN(cursor, 0, 8)) /* 7-8: st extensions */ return 1; win.cursor = cursor; + cursorblinks = win.cursor == 0 || win.cursor == 1 || + win.cursor == 3 || win.cursor == 5 || + win.cursor == 7; return 0; } @@ -1956,6 +1974,10 @@ run(void) if (FD_ISSET(ttyfd, &rfd) || xev) { if (!drawing) { trigger = now; + if (IS_SET(MODE_BLINK)) { + win.mode ^= MODE_BLINK; + } + lastblink = now; drawing = 1; } timeout = (maxlatency - TIMEDIFF(now, trigger)) \ @@ -1966,7 +1988,7 @@ run(void) /* idle detected or maxlatency exhausted -> draw */ timeout = -1; - if (blinktimeout && tattrset(ATTR_BLINK)) { + if (blinktimeout && (cursorblinks || tattrset(ATTR_BLINK))) { timeout = blinktimeout - TIMEDIFF(now, lastblink); if (timeout <= 0) { if (-timeout > blinktimeout) /* start visible */ @@ -2002,7 +2024,7 @@ main(int argc, char *argv[]) { xw.l = xw.t = 0; xw.isfixed = False; - xsetcursor(cursorshape); + xsetcursor(cursorstyle); ARGBEGIN { case 'a': |
