From 833e6e0c92c1d24948ffc086e4d1c69e90dd04c2 Mon Sep 17 00:00:00 2001
From: mo8it <mo8it@proton.me>
Date: Mon, 26 Aug 2024 00:24:39 +0200
Subject: [PATCH] Newline after resetting attributes

---
 src/exercise.rs    |  6 ++++--
 src/init.rs        |  9 +++++----
 src/watch/state.rs | 12 +++++++-----
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/exercise.rs b/src/exercise.rs
index 462287d..ea15465 100644
--- a/src/exercise.rs
+++ b/src/exercise.rs
@@ -31,8 +31,9 @@ fn run_bin(
 ) -> Result<bool> {
     if let Some(output) = output.as_deref_mut() {
         write_ansi(output, SetAttribute(Attribute::Underlined));
-        output.extend_from_slice(b"Output\n");
+        output.extend_from_slice(b"Output");
         write_ansi(output, ResetColor);
+        output.push(b'\n');
     }
 
     let success = cmd_runner.run_debug_bin(bin_name, output.as_deref_mut())?;
@@ -44,8 +45,9 @@ fn run_bin(
             // leaves the user confused about why the exercise isn't done yet.
             write_ansi(output, SetAttribute(Attribute::Bold));
             write_ansi(output, SetForegroundColor(Color::Red));
-            output.extend_from_slice(b"The exercise didn't run successfully (nonzero exit code)\n");
+            output.extend_from_slice(b"The exercise didn't run successfully (nonzero exit code)");
             write_ansi(output, ResetColor);
+            output.push(b'\n');
         }
     }
 
diff --git a/src/init.rs b/src/init.rs
index 40d9910..aecb2d8 100644
--- a/src/init.rs
+++ b/src/init.rs
@@ -148,10 +148,11 @@ pub fn init() -> Result<()> {
     }
 
     stdout.queue(SetForegroundColor(Color::Green))?;
-    stdout.write_all("Initialization done ✓\n\n".as_bytes())?;
-    stdout
-        .queue(ResetColor)?
-        .queue(SetAttribute(Attribute::Bold))?;
+    stdout.write_all("Initialization done ✓".as_bytes())?;
+    stdout.queue(ResetColor)?;
+    stdout.write_all(b"\n\n")?;
+
+    stdout.queue(SetAttribute(Attribute::Bold))?;
     stdout.write_all(POST_INIT_MSG)?;
     stdout.queue(ResetColor)?;
 
diff --git a/src/watch/state.rs b/src/watch/state.rs
index 47af919..1c2e2a9 100644
--- a/src/watch/state.rs
+++ b/src/watch/state.rs
@@ -149,8 +149,9 @@ impl<'a> WatchState<'a> {
                     Attributes::from(Attribute::Bold).with(Attribute::Underlined),
                 ))?
                 .queue(SetForegroundColor(Color::Cyan))?;
-            stdout.write_all(b"Hint\n")?;
+            stdout.write_all(b"Hint")?;
             stdout.queue(ResetColor)?;
+            stdout.write_all(b"\n")?;
 
             stdout.write_all(self.app_state.current_exercise().hint.as_bytes())?;
             stdout.write_all(b"\n\n")?;
@@ -160,16 +161,17 @@ impl<'a> WatchState<'a> {
             stdout
                 .queue(SetAttribute(Attribute::Bold))?
                 .queue(SetForegroundColor(Color::Green))?;
-            stdout.write_all("Exercise done ✓\n".as_bytes())?;
+            stdout.write_all("Exercise done ✓".as_bytes())?;
             stdout.queue(ResetColor)?;
+            stdout.write_all(b"\n")?;
 
             if let DoneStatus::DoneWithSolution(solution_path) = &self.done_status {
                 solution_link_line(stdout, solution_path)?;
             }
 
-            writeln!(
-                stdout,
-                "When done experimenting, enter `n` to move on to the next exercise 🦀\n",
+            stdout.write_all(
+                "When done experimenting, enter `n` to move on to the next exercise 🦀\n\n"
+                    .as_bytes(),
             )?;
         }