bool SchemeComponent::HandleKeyEvent(const KeyEvent & e)
  {
    bool componentResult = Component::HandleKeyEvent(e);
    stringstream ss;

    ss << "(scheme-component-handle-key-event " << this->GetComponentNum() << " ";
    switch (e.GetType()) {
    case KeyEvent::keyPress:
      ss << "'key-press";
      break;

    case KeyEvent::keyRelease:
      ss << "'key-release";
      break;

    default:
      LOG_ERROR << "Error: Unknown KeyEvent type: " << e.GetType();
      return componentResult;
    }
    ss << " #\\" << e.GetChar();
    ss << ")";

    scheme* sc = NULL;
    pointer result;
    int error;
    bool schemeResult = false;
    error = scheme_interpreter_evaluate_string(ss.str().c_str(), &sc, &result);

    if (error) {
      LOG_ERROR << "Error evaluating string: " << ss.str();
    } else {
      if (sc != NULL) {
        schemeResult = result == sc->T;
      } else {
        LOG_ERROR << "Error: No pointer Scheme interpreter returned;";
      }
    }
    return componentResult || schemeResult;
  }