st
simple terminal
git clone https://9o.is/git/st.git
commit 1304f99b8b01822d10f26890ac36ce4cfd9f2752 parent ccb4df002c9a7c172730dc33038dfc918cab56de Author: noname <noname@inventati.org> Date: Fri, 1 May 2015 17:13:13 +0000 Add enumeration for sel.mode This patch also prevents sel.mode from increasing beyond 2. It is almost impossible, but sel.mode may overflow if mouse is moved around for too long while selecting. Diffstat:
| M | st.c | | | 23 | ++++++++++++++--------- |
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/st.c b/st.c @@ -162,6 +162,12 @@ enum window_state { WIN_FOCUSED = 2 }; +enum selection_mode { + SEL_IDLE = 0, + SEL_EMPTY = 1, + SEL_READY = 2 +}; + enum selection_type { SEL_REGULAR = 1, SEL_RECTANGULAR = 2 @@ -643,7 +649,7 @@ void selinit(void) { memset(&sel.tclick1, 0, sizeof(sel.tclick1)); memset(&sel.tclick2, 0, sizeof(sel.tclick2)); - sel.mode = 0; + sel.mode = SEL_IDLE; sel.ob.x = -1; sel.primary = NULL; sel.clipboard = NULL; @@ -897,7 +903,7 @@ bpress(XEvent *e) { /* Clear previous selection, logically and visually. */ selclear(NULL); - sel.mode = 1; + sel.mode = SEL_EMPTY; sel.type = SEL_REGULAR; sel.oe.x = sel.ob.x = x2col(e->xbutton.x); sel.oe.y = sel.ob.y = y2row(e->xbutton.y); @@ -920,7 +926,7 @@ bpress(XEvent *e) { * make clicks visible */ if(sel.snap != 0) { - sel.mode++; + sel.mode = SEL_READY; tsetdirt(sel.nb.y, sel.ne.y); } sel.tclick2 = sel.tclick1; @@ -1142,13 +1148,12 @@ brelease(XEvent *e) { if(e->xbutton.button == Button2) { selpaste(NULL); } else if(e->xbutton.button == Button1) { - if(sel.mode < 2) { - selclear(NULL); - } else { + if(sel.mode == SEL_READY) { getbuttoninfo(e); selcopy(e->xbutton.time); - } - sel.mode = 0; + } else + selclear(NULL); + sel.mode = SEL_IDLE; tsetdirt(sel.nb.y, sel.ne.y); } } @@ -1165,7 +1170,7 @@ bmotion(XEvent *e) { if(!sel.mode) return; - sel.mode++; + sel.mode = SEL_READY; oldey = sel.oe.y; oldex = sel.oe.x; oldsby = sel.nb.y;