diff -urN cui0/key.c cui1/key.c
--- cui0/key.c	Thu Jan 30 03:00:00 2014
+++ cui1/key.c	Thu Jan 30 03:10:00 2014
@@ -44,4 +44,26 @@
 	return uc;
 }
 
+int
+cui_key_get2(void)
+{
+	int k, k2, k3;
+
+	k= cui_key_get();
+	if(k == 0x7f) return CUI_KEY_BS;
+	if(k == CUI_KEY_ESC){
+		k2 = cui_key_get();		
+		if(k2 == '['){
+			k3 = cui_key_get();
+			switch(k3){
+			case 'A': return CUI_KEY_UP;
+			case 'B': return CUI_KEY_DOWN;
+			case 'C': return CUI_KEY_RIGHT;
+			case 'D': return CUI_KEY_LEFT;
+			}
+		}
+	}
+	return k;
+}
+
 /* EOF */
diff -urN cui0/key.h cui1/key.h
--- cui0/key.h	Thu Jan 30 03:00:00 2014
+++ cui1/key.h	Thu Jan 30 03:10:00 2014
@@ -1,8 +1,17 @@
 #ifndef __KEY_H__
 #define __KEY_H__
 
+#define CUI_KEY_ENTER	0x0d /* '\r' */
+#define CUI_KEY_BS	0x08 /* '\b' */
+#define CUI_KEY_UP	0x11 /* DC1 */
+#define CUI_KEY_DOWN	0x12 /* DC2 */
+#define CUI_KEY_LEFT	0x13 /* DC3 */
+#define CUI_KEY_RIGHT	0x14 /* DC4 */
+#define CUI_KEY_ESC	0x1b
+
 void cui_key_enter(void);
 void cui_key_exit(void);
 int cui_key_get(void);
+int cui_key_get2(void);
 
 #endif
diff -urN cui0/key_test.c cui1/key_test.c
--- cui0/key_test.c	Thu Jan 30 03:00:00 2014
+++ cui1/key_test.c	Thu Jan 30 03:10:00 2014
@@ -9,7 +9,7 @@
 
 	cui_key_enter();
 
-	while((key = cui_key_get()) != 'q'){
+	while((key = cui_key_get2()) != 'q'){
 		if(key == 0){
 			printf(".");
 		}else{