From 992753a6b578e33c5078ca44667e055f04e0bad4 Mon Sep 17 00:00:00 2001
From: Mark Edgar <medgar123@gmail.com>
Date: Sun, 6 Oct 2013 13:38:24 +0200
Subject: [PATCH 3/3] Simplify matching logic in match() and kmap().

---
 st.c | 24 +++++-------------------
 1 file changed, 5 insertions(+), 19 deletions(-)

diff --git a/st.c b/st.c
index c2859b6..422f4c9 100644
--- a/st.c
+++ b/st.c
@@ -3502,14 +3502,7 @@ focus(XEvent *ev) {
 static inline bool
 match(uint mask, uint state) {
 	state &= ~ignoremod;
-
-	if(mask == XK_NO_MOD && state)
-		return false;
-	if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
-		return false;
-	if(mask == XK_ANY_MOD)
-		return true;
-	return state == mask;
+	return mask == XK_ANY_MOD || state == mask;
 }
 
 void
@@ -3528,25 +3521,18 @@ kmap(KeySym k, uint state) {
 		if(!match(kp->mask, state))
 			continue;
 
-		if(kp->keypad > 0) {
-			if(!IS_SET(MODE_APPKEYPAD))
+		if(kp->keypad) {
+			if(IS_SET(MODE_APPKEYPAD) != (kp->keypad > 0))
 				continue;
 			if(term.numlock && kp->keypad == 2)
 				continue;
-		} else if(kp->keypad < 0 && IS_SET(MODE_APPKEYPAD)) {
-			continue;
 		}
 
-		if((kp->cursor < 0 && IS_SET(MODE_APPCURSOR)) ||
-				(kp->cursor > 0
-				 && !IS_SET(MODE_APPCURSOR))) {
+		if(kp->cursor && IS_SET(MODE_APPCURSOR) != (kp->cursor > 0))
 			continue;
-		}
 
-		if((kp->crlf < 0 && IS_SET(MODE_CRLF)) ||
-				(kp->crlf > 0 && !IS_SET(MODE_CRLF))) {
+		if(kp->crlf && IS_SET(MODE_CRLF) != (kp->crlf > 0))
 			continue;
-		}
 
 		return kp->s;
 	}
-- 
1.8.4

