 parse_options: ->
   option_parser: new optparse.OptionParser SWITCHES, BANNER
   o: options:    option_parser.parse(process.argv)
-  options.run:   not (o.compile or o.print or o.lint or o.eval)
+  options.run:   not (o.compile or o.print or o.lint)
+  options.print: !!  (o.print or (o.eval or o.stdio and o.compile))
   sources:       options.arguments[2...options.arguments.length]
 
 # The compile-time options to pass to the CoffeeScript compiler.

  o: options
  code_opts: compile_options source
  try
    if      o.tokens            then print_tokens CoffeeScript.tokens code
    else if o.nodes             then puts CoffeeScript.nodes(code).toString()
    else if o.run               then CoffeeScript.run code, code_opts
    else
      js: CoffeeScript.compile code, code_opts
      if      o.compile         then write_js source, js
      else if o.lint            then lint js
      else if o.print or o.eval then print js
  catch err
    if o.watch                  then puts err.message else throw err

# Attach the appropriate listeners to compile scripts incoming over **stdin**,
# and write them back to **stdout**.

  process.stdio.addListener 'data', (string) ->
    code += string if string
  process.stdio.addListener 'close', ->
    compile_script 'stdio', code

# Watch a list of source CoffeeScript files using `fs.watchFile`, recompiling
# them every time the files are updated. May be used in combination with other
