Index: uspace/app/bdsh/cmds/modules/cat/cat.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cat/cat.c	(revision d553f8115e76eff8b7a50f10d4244ed67802ae39)
+++ uspace/app/bdsh/cmds/modules/cat/cat.c	(revision 2afc54d8a6e1f63b5c879f6b278d4bc98ebc85ca)
@@ -39,4 +39,5 @@
 #include <io/color.h>
 #include <io/style.h>
+#include <io/keycode.h>
 #include <errno.h>
 #include <vfs/vfs.h>
@@ -62,4 +63,5 @@
 static sysarg_t console_cols = 0;
 static sysarg_t console_rows = 0;
+static bool should_quit = false;
 
 static struct option const long_options[] = {
@@ -102,5 +104,6 @@
 	console_set_pos(fphone(stdout), 0, console_rows-1);
 	console_set_color(fphone(stdout), COLOR_BLUE, COLOR_WHITE, 0);
-	printf("Press any key to continue");
+	printf("ENTER/SPACE/PAGE DOWN - next page, "
+	       "ESC/Q - quit, C - continue unpaged");
 	fflush(stdout);
 	console_set_style(fphone(stdout), STYLE_NORMAL);
@@ -116,5 +119,16 @@
 		}
 		if (ev.type == KEY_PRESS) {
-			return;
+			if (ev.key == KC_ESCAPE || ev.key == KC_Q) {
+				should_quit = true;
+				return;
+			}
+			if (ev.key == KC_C) {
+				paging_enabled = false;
+				return;
+			}
+			if (ev.key == KC_ENTER || ev.key == KC_SPACE ||
+			    ev.key == KC_PAGE_DOWN) {
+				return;
+			}
 		}
 	}
@@ -177,5 +191,5 @@
 			buff[bytes] = '\0';
 			offset = 0;
-			for (i = 0; i < bytes; i++) {
+			for (i = 0; i < bytes && !should_quit; i++) {
 				if (hex) {
 					paged_char(hexchars[((uint8_t)buff[i])/16]);
@@ -194,5 +208,5 @@
 			reads++;
 		}
-	} while (bytes > 0);
+	} while (bytes > 0 && !should_quit);
 
 	close(fd);
@@ -225,4 +239,5 @@
 	console_cols = 0;
 	console_rows = 0;
+	should_quit = false;
 
 	argc = cli_count_args(argv);
@@ -278,5 +293,5 @@
 	}
 
-	for (i = optind; argv[i] != NULL; i++)
+	for (i = optind; argv[i] != NULL && !should_quit; i++)
 		ret += cat_file(argv[i], buffer, hex);
 
