st
simple terminal
git clone https://9o.is/git/st.git
commit d7489f998f946f0f0efab0f88993e82879a1600c parent 794c48de9fd8b33a65370cfed92a615ed62b7a04 Author: noname <noname@inventati.org> Date: Sun, 3 May 2015 19:28:10 +0000 Fix empty selection highlighting bug. When user clicks LMB, one character is selected, but will not be copied to selection until the user moves cursor a bit. Therefore, the character should not be highlighted as selected yet. Before the patch, the trick was not to mark line as dirty to avoid highlighting it. However, if user has already selected something and clicks in line that contains selection, selclear sets the line as dirty and one character is highlighted when it should not. This patch replaces dirty trick with explicit check for sel.mode inside selected(). Diffstat:
| M | st.c | | | 12 | +++++------- |
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/st.c b/st.c @@ -716,6 +716,9 @@ selnormalize(void) { bool selected(int x, int y) { + if(sel.mode == SEL_EMPTY) + return false; + if(sel.type == SEL_RECTANGULAR) return BETWEEN(y, sel.nb.y, sel.ne.y) && BETWEEN(x, sel.nb.x, sel.ne.x); @@ -921,14 +924,9 @@ bpress(XEvent *e) { } selnormalize(); - /* - * Draw selection, unless it's regular and we don't want to - * make clicks visible - */ - if(sel.snap != 0) { + if(sel.snap != 0) sel.mode = SEL_READY; - tsetdirt(sel.nb.y, sel.ne.y); - } + tsetdirt(sel.nb.y, sel.ne.y); sel.tclick2 = sel.tclick1; sel.tclick1 = now; }