Added the force redraw on keypress patch

This commit is contained in:
bakkeby 2020-04-20 12:14:49 +02:00
parent ae97f681fc
commit a4d8ea1853
3 changed files with 36 additions and 1 deletions

View File

@ -1,4 +1,4 @@
Similar to [dwm-flexipatch](https://github.com/bakkeby/dwm-flexipatch) this st 0.8.2 (51e19ea11dd42eefed1ca136ee3f6be975f618b1, 2020-02-18) project has a different take on st patching. It uses preprocessor directives to decide whether or not to include a patch during build time. Essentially this means that this build, for better or worse, contains both the patched _and_ the original code. The aim being that you can select which patches to include and the build will contain that code and nothing more.
Similar to [dwm-flexipatch](https://github.com/bakkeby/dwm-flexipatch) this st 0.8.2 (c279f5, 2020-04-19) project has a different take on st patching. It uses preprocessor directives to decide whether or not to include a patch during build time. Essentially this means that this build, for better or worse, contains both the patched _and_ the original code. The aim being that you can select which patches to include and the build will contain that code and nothing more.
For example to include the `alpha` patch then you would only need to flip this setting from 0 to 1 in [patches.h](https://github.com/bakkeby/st-flexipatch/blob/master/patches.def.h):
```c
@ -15,6 +15,8 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
### Changelog:
2020-04-20 - Added the force redraw on pselect after key is pressed patch
2020-03-29 - Added invert and workingdir patches
2020-03-24 - Upgraded to latest (master) of st (commit 51e19ea11dd42eefed1ca136ee3f6be975f618b1 at the time of writing). Custom changes to make the altscreen mouse scollback patch working.
@ -68,6 +70,9 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
- [font2](https://st.suckless.org/patches/font2/)
- allows you to add a spare font besides the default
- [force-redraw-after-keypress](https://lists.suckless.org/hackers/2004/17221.html)
- this patch forces the terminal to check for new data on the tty on keypress with the aim of reducing input latency
- [hidecursor](https://st.suckless.org/patches/hidecursor/)
- hides the X cursor whenever a key is pressed and show it back when the mouse is moved in the terminal window

View File

@ -82,6 +82,15 @@
*/
#define FONT2_PATCH 0
/* This patch creates a global flag which is set when a keypress is sent
* from X which forces the terminal to check for new data on the tty fd on
* every return from pselect(). When new data read from the tty results in
* a line being redrawn, the flag is reset. This results in a less input lag
* when typing on the terminal.
* https://lists.suckless.org/hackers/2004/17221.html
*/
#define FORCE_REDRAW_AFTER_KEYPRESS 0
/* Hide the X cursor whenever a key is pressed and show it back when the mouse is moved in
* the terminal window.
* https://st.suckless.org/patches/hidecursor/

21
x.c
View File

@ -251,6 +251,9 @@ static DC dc;
static XWindow xw;
static XSelection xsel;
static TermWindow win;
#if FORCE_REDRAW_AFTER_KEYPRESS
static int pendingkpress = 0;
#endif // FORCE_REDRAW_AFTER_KEYPRESS
/* Font Ring Cache */
enum {
@ -935,6 +938,12 @@ xclear(int x1, int y1, int x2, int y2)
#endif // INVERT_PATCH
}
void
xclearwin(void)
{
xclear(0, 0, win.w, win.h);
}
void
xhints(void)
{
@ -1937,6 +1946,10 @@ xdrawline(Line line, int x1, int y1, int x2)
Glyph base, new;
XftGlyphFontSpec *specs = xw.specbuf;
#if FORCE_REDRAW_AFTER_KEYPRESS
pendingkpress = 0;
#endif // FORCE_REDRAW_AFTER_KEYPRESS
numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1);
i = ox = 0;
for (x = x1; x < x2 && i < numspecs; x++) {
@ -2168,6 +2181,10 @@ kpress(XEvent *ev)
Status status;
Shortcut *bp;
#if FORCE_REDRAW_AFTER_KEYPRESS
pendingkpress = 1;
#endif // FORCE_REDRAW_AFTER_KEYPRESS
#if HIDECURSOR_PATCH
if (xw.pointerisvisible) {
XDefineCursor(xw.dpy, xw.win, xw.bpointer);
@ -2330,6 +2347,10 @@ run(void)
tv = &drawtimeout;
dodraw = 0;
#if FORCE_REDRAW_AFTER_KEYPRESS
if (pendingkpress)
dodraw = 1;
#endif // FORCE_REDRAW_AFTER_KEYPRESS
#if VISUALBELL_2_PATCH || VISUALBELL_3_PATCH
to_ms = -1; /* timeout in ms, indefinite if negative */
if (blinkset) {