         programDone() if name is currentScheme
 
         data.currentScheme = currentScheme = name
-        console.log "changing scheme to #{chalk.cyan name}"
+        console.error "changing scheme to #{chalk.cyan name}"
         if _.isObject(data.schemes[name])
           saveDataFile()
         else
-          console.log chalk.grey "initializing empty scheme object"
+          console.error chalk.grey "initializing empty scheme object"
           initalizeScheme name
         programDone()
 
-      listSlots: () ->
+      listSchemes: () ->
+        console.error "schemes"
+        console.error "------------------------------"
+        for scheme in _.keys(data.schemes)
+          console.error chalk.gray scheme
+
+      listSlots: (noExit) ->
         schemeMsg "listing slots"
-        console.log "------------------------------"
+        console.error "------------------------------"
         slots = _.sortBy(_.pairs(scheme.slots), (pair) -> parseInt(pair[0]))
         for pair in slots
-          console.log "#{chalk.yellow pair[0]}\t#{chalk.grey pair[1]}"
-        programDone()
+          console.error "#{chalk.yellow pair[0]}\t#{chalk.grey pair[1]}"
+        programDone() unless _.isBoolean(noExit) and noExit
+
+      pickSlot: () ->
+        commands.listSlots(true)
+        readline = require "readline"
+        rl = readline.createInterface
+          input: process.stdin
+          output: process.stderr
+          terminal: colors
+        rl.on "line", (line) ->
+          commands.getSlot(line.trim())
+        rl.prompt()
 
       getSlot: (idx) ->
         idx = parseInt(idx)

runCommand = (cmd) ->
  return () ->
    # make these variables available outside of initialize scope
    dataDir = data = dataFile = currentScheme = scheme = commands = undefined

    schemeMsg = (msg) ->
      console.log chalk.cyan("[ #{currentScheme} ]") + " - #{msg}"

    saveDataFile = () ->
      fs.writeFileSync(dataFile, JSON.stringify(data), "utf8")

      else
        data =
          currentScheme: "default"
          color: true
          schemes: {}
        initalizeScheme "default"
      currentScheme = data.currentScheme
      chalk.enabled = colors = (if data.color? then data.color else true)
      fatalError("currentScheme property is missing in data.json") unless _.isString(currentScheme)
      scheme = data.schemes[currentScheme]
      fatalError("#{currentScheme} scheme object is missing in data.json") unless _.isObject(scheme)
