extern crate clap;

use clap::{Arg, App};
use std::ffi::OsStr;
use std::fs::File;
use std::io;

fn main() {
    let app = App::new(env!("CARGO_PKG_NAME"))
        .version(env!("CARGO_PKG_VERSION"))
        .author("Scott Olson <scott@solson.me>")
        .about(env!("CARGO_PKG_DESCRIPTION"))
        .arg(Arg::with_name("FILE")
             .multiple(true)
             .required(true)
             .help("The file(s) to display"));

    if std::env::args().len() == 1 {
        app.print_help().unwrap();
        println!("");
        return;
    }

    let matches = app.get_matches();
    let files: Vec<&OsStr> = matches.values_of_os("FILE").unwrap().collect();

    let mut first = true;
    for &filename in &files {
        if first { first = false; } else { println!(""); }

        if files.len() > 1 {
            println!("# {}", filename.to_string_lossy());
        }

        io::copy(&mut File::open(filename).unwrap(), &mut io::stdout()).unwrap();
    }
}

extern crate clap;

use clap::{Arg, App};
use std::fs::File;
use std::io;

fn main() {
    let matches = App::new(env!("CARGO_PKG_NAME"))
        .version(env!("CARGO_PKG_VERSION"))
        .author("Scott Olson <scott@solson.me>")
        .about(env!("CARGO_PKG_DESCRIPTION"))
        .arg(Arg::with_name("INPUT")
             .multiple(true)
             .required(true)
             .help("The file(s) to display"))
        .get_matches();

    let files: Vec<&str> = matches.values_of("INPUT").unwrap().collect();

    let mut first = true;
    for &filename in &files {
        if first { first = false; } else { println!(""); }

        if files.len() > 1 {
            println!("# {}", filename);
        }

        io::copy(&mut File::open(filename).unwrap(), &mut io::stdout()).unwrap();
    }
}

--- 
+++ 
@@ -1,28 +1,35 @@
 extern crate clap;
 
 use clap::{Arg, App};
+use std::ffi::OsStr;
 use std::fs::File;
 use std::io;
 
 fn main() {
-    let matches = App::new(env!("CARGO_PKG_NAME"))
+    let app = App::new(env!("CARGO_PKG_NAME"))
         .version(env!("CARGO_PKG_VERSION"))
         .author("Scott Olson <scott@solson.me>")
         .about(env!("CARGO_PKG_DESCRIPTION"))
-        .arg(Arg::with_name("INPUT")
+        .arg(Arg::with_name("FILE")
              .multiple(true)
              .required(true)
-             .help("The file(s) to display"))
-        .get_matches();
+             .help("The file(s) to display"));
 
-    let files: Vec<&str> = matches.values_of("INPUT").unwrap().collect();
+    if std::env::args().len() == 1 {
+        app.print_help().unwrap();
+        println!("");
+        return;
+    }
+
+    let matches = app.get_matches();
+    let files: Vec<&OsStr> = matches.values_of_os("FILE").unwrap().collect();
 
     let mut first = true;
     for &filename in &files {
         if first { first = false; } else { println!(""); }
 
         if files.len() > 1 {
-            println!("# {}", filename);
+            println!("# {}", filename.to_string_lossy());
         }
 
         io::copy(&mut File::open(filename).unwrap(), &mut io::stdout()).unwrap();
Print help message when given no arguments.
