Index: uspace/lib/clui/tinput.c
===================================================================
--- uspace/lib/clui/tinput.c	(revision 7eec25fcc916d12889b4ae19ba7f3e78678be3dd)
+++ uspace/lib/clui/tinput.c	(revision f7a80521b3314c77b61a3a2ce80b11347ea69ce0)
@@ -172,8 +172,13 @@
 }
 
-/** Update text_coord, prompt_coord in case the screen could have scrolled. */
-static void tinput_update_origin(tinput_t *ti)
-{
-	unsigned end_coord = ti->text_coord + ti->nc;
+/** Update text_coord, prompt_coord in case the screen would scroll
+ * due to @a end_coord being beyond the end of the screen
+ *
+ * @param ti Text input
+ * @param end_coord Linear screen coordinate to which the cursor would
+ *                  be moved if the screen would not have scrolled
+ */
+static void tinput_update_origin_coord(tinput_t *ti, unsigned end_coord)
+{
 	unsigned end_row = LIN_TO_ROW(ti, end_coord);
 
@@ -188,4 +193,11 @@
 }
 
+/** Update text_coord, prompt_coord in case the screen could have scrolled. */
+static void tinput_update_origin(tinput_t *ti)
+{
+	/* Account for scrolling until the end of the input text */
+	tinput_update_origin_coord(ti, ti->text_coord + ti->nc);
+}
+
 static void tinput_jump_after(tinput_t *ti)
 {
@@ -203,8 +215,16 @@
 
 	ti->prompt_coord = row0 * ti->con_cols + col0;
+	ti->text_coord = ti->prompt_coord;
+	tinput_display_prompt(ti);
+
+	/* The screen might have scrolled after priting the prompt */
+	tinput_update_origin_coord(ti, ti->prompt_coord + str_width(ti->prompt));
+
 	ti->text_coord = ti->prompt_coord + str_length(ti->prompt);
-
-	tinput_display_prompt(ti);
 	tinput_display_tail(ti, 0, 0);
+
+	/* The screen might have scrolled after priting the text */
+	tinput_update_origin(ti);
+
 	tinput_position_caret(ti);
 
