diff --git a/CHANGELOG.md b/CHANGELOG.md
index aa55ca6..4ae6f6d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.3.5-dev
+
+* Restore command line output accidentally removed in 1.3.4.
+
 # 1.3.4
 
 * Add `--fix-single-cascade-statements`.
diff --git a/bin/format.dart b/bin/format.dart
index a11ded0..88193e2 100644
--- a/bin/format.dart
+++ b/bin/format.dart
@@ -53,7 +53,7 @@
     usageError(parser, 'Cannot use --$chosen and --$other at the same time.');
   }
 
-  var show = Show.overwrite;
+  var show = Show.legacy;
   var summary = Summary.none;
   var output = Output.show;
   var setExitIfChanged = false;
@@ -71,6 +71,7 @@
           'Cannot use --overwrite without providing any paths to format.');
     }
 
+    show = Show.overwrite;
     output = Output.write;
   } else if (argResults['machine']) {
     output = Output.json;
diff --git a/lib/src/cli/show.dart b/lib/src/cli/show.dart
index 56734c9..810759f 100644
--- a/lib/src/cli/show.dart
+++ b/lib/src/cli/show.dart
@@ -14,6 +14,9 @@
   /// Only files whose formatting changed.
   static const Show changed = _ChangedShow();
 
+  /// The legacy dartfmt output style when not overwriting files.
+  static const Show legacy = _LegacyShow();
+
   /// The legacy dartfmt output style when overwriting files.
   static const Show overwrite = _OverwriteShow();
 
@@ -53,13 +56,7 @@
   }
 }
 
-class _NoneShow extends Show {
-  const _NoneShow() : super._();
-}
-
-class _AllShow extends Show {
-  const _AllShow() : super._();
-
+mixin _ShowFileMixin on Show {
   @override
   bool file(String path, {bool changed, bool overwritten}) {
     if (changed) {
@@ -72,27 +69,12 @@
   }
 }
 
-class _ChangedShow extends Show {
-  const _ChangedShow() : super._();
-
-  @override
-  bool file(String path, {bool changed, bool overwritten}) {
-    if (changed) _showFileChange(path, overwritten: overwritten);
-    return changed;
-  }
-}
-
-class _OverwriteShow extends Show {
-  const _OverwriteShow() : super._();
-
+mixin _LegacyMixin on Show {
   @override
   String displayPath(String directory, String file) =>
       p.relative(file, from: directory);
 
   @override
-  bool file(String path, {bool changed, bool overwritten}) => true;
-
-  @override
   void directory(String directory) {
     print('Formatting directory $directory:');
   }
@@ -108,6 +90,32 @@
   }
 }
 
+class _NoneShow extends Show {
+  const _NoneShow() : super._();
+}
+
+class _AllShow extends Show with _ShowFileMixin {
+  const _AllShow() : super._();
+}
+
+class _ChangedShow extends Show {
+  const _ChangedShow() : super._();
+
+  @override
+  bool file(String path, {bool changed, bool overwritten}) {
+    if (changed) _showFileChange(path, overwritten: overwritten);
+    return changed;
+  }
+}
+
+class _LegacyShow extends Show with _LegacyMixin {
+  const _LegacyShow() : super._();
+}
+
+class _OverwriteShow extends Show with _ShowFileMixin, _LegacyMixin {
+  const _OverwriteShow() : super._();
+}
+
 class _DryRunShow extends Show {
   const _DryRunShow() : super._();
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 38c2dae..cc50185 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: dart_style
 # Note: See tool/grind.dart for how to bump the version.
-version: 1.3.4
+version: 1.3.5-dev
 description: >-
   Opinionated, automatic Dart source code formatter.
   Provides an API and a CLI tool.
diff --git a/test/command_line_test.dart b/test/command_line_test.dart
index 9bbaf07..5d66710 100644
--- a/test/command_line_test.dart
+++ b/test/command_line_test.dart
@@ -35,6 +35,28 @@
     await d.dir('code', [d.file('c.dart', unformattedSource)]).validate();
   });
 
+  test('Overwrites files', () async {
+    await d.dir('code', [
+      d.file('a.dart', unformattedSource),
+      d.file('b.dart', formattedSource),
+      d.file('c.dart', unformattedSource)
+    ]).create();
+
+    var process = await runFormatterOnDir(['--overwrite']);
+    await expectLater(
+        process.stdout, emits(startsWith('Formatting directory')));
+
+    // Prints whether each file was changed.
+    await expectLater(process.stdout, emits('Formatted code/a.dart'));
+    await expectLater(process.stdout, emits('Unchanged code/b.dart'));
+    await expectLater(process.stdout, emits('Formatted code/c.dart'));
+    await process.shouldExit(0);
+
+    // Overwrites the files.
+    await d.dir('code', [d.file('a.dart', formattedSource)]).validate();
+    await d.dir('code', [d.file('c.dart', formattedSource)]).validate();
+  });
+
   test('exits with 64 on a command line argument error', () async {
     var process = await runFormatter(['-wat']);
     await process.shouldExit(64);
@@ -164,7 +186,6 @@
       var process = await runFormatterOnDir(['--machine']);
 
       // The order isn't specified.
-
       expect(await process.stdout.next, anyOf(jsonA, jsonB));
       expect(await process.stdout.next, anyOf(jsonA, jsonB));
       await process.shouldExit();
