Index: uspace/app/newfile/meson.build
===================================================================
--- uspace/app/newfile/meson.build	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/newfile/meson.build	(revision 5e0ea6f520af8c8faa2c9eeaf59cf6dc8f52bd53)
@@ -27,4 +27,4 @@
 #
 
-deps = [ 'fmgt' ]
+deps = [ 'console', 'fmgt', 'input' ]
 src = files('newfile.c')
Index: uspace/app/newfile/newfile.c
===================================================================
--- uspace/app/newfile/newfile.c	(revision 0cf3d5fd80c26cfc1eb8307bffabaf2efbd10f3a)
+++ uspace/app/newfile/newfile.c	(revision 5e0ea6f520af8c8faa2c9eeaf59cf6dc8f52bd53)
@@ -36,4 +36,7 @@
 #include <errno.h>
 #include <fmgt.h>
+#include <io/console.h>
+#include <io/cons_event.h>
+#include <io/kbd_event.h>
 #include <stdbool.h>
 #include <stdio.h>
@@ -44,4 +47,5 @@
 #define NAME  "newfile"
 
+static bool newfile_abort_query(void *);
 static void newfile_progress(void *, fmgt_progress_t *);
 
@@ -49,5 +53,8 @@
 static bool quiet = false;
 
+static console_ctrl_t *con;
+
 static fmgt_cb_t newfile_fmgt_cb = {
+	.abort_query = newfile_abort_query,
 	.progress = newfile_progress
 };
@@ -62,4 +69,37 @@
 	printf("\t-q           quiet\n");
 	printf("\t-size=<cap>  file size (<number>[<kB>|<MB>|...])\n");
+}
+
+/** Called by fmgt to query for user abort.
+ *
+ * @param arg Argument (not used)
+ * @return @c true iff user requested abort
+ */
+static bool newfile_abort_query(void *arg)
+{
+	cons_event_t event;
+	kbd_event_t *ev;
+	errno_t rc;
+	usec_t timeout;
+
+	if (con == NULL)
+		return false;
+
+	timeout = 0;
+	rc = console_get_event_timeout(con, &event, &timeout);
+	if (rc != EOK)
+		return false;
+
+	if (event.type == CEV_KEY && event.ev.key.type == KEY_PRESS) {
+		ev = &event.ev.key;
+		if ((ev->mods & KM_ALT) == 0 &&
+		    (ev->mods & KM_SHIFT) == 0 &&
+		    (ev->mods & KM_CTRL) != 0) {
+			if (ev->key == KC_C)
+				return true;
+		}
+	}
+
+	return false;
 }
 
@@ -93,4 +133,6 @@
 	uint64_t nbytes = 0;
 
+	con = console_init(stdin, stdout);
+
 	i = 1;
 	while (i < argc && argv[i][0] == '-') {
@@ -167,11 +209,10 @@
 
 	rc = fmgt_new_file(fmgt, fname, nbytes, sparse ? nf_sparse : nf_none);
+	if (prog_upd)
+		printf("\n");
 	if (rc != EOK) {
 		printf("Error creating file: %s.\n", str_error(rc));
 		goto error;
 	}
-
-	if (prog_upd)
-		printf("\n");
 
 	free(fname);
