private String buildKeybindingInfo() {
   final StringBuilder sb = new StringBuilder();
   final CMKeymapSetOverlay keymapsObject = codeMirror.keyMap();
   for (final String keymapKey : keymapsObject.getKeys()) {
     if (keymapKey == null || keymapKey.startsWith("emacs") || keymapKey.startsWith("vim")) {
       continue;
     }
     sb.append("# ").append(keymapKey).append("\n\n");
     final CMKeymapOverlay keymap = keymapsObject.get(keymapKey);
     for (final String binding : keymap.getKeys()) {
       if ("fallthrough".equals(binding)
           || "nofallthrough".equals(binding)
           || "disableInput".equals(binding)
           || "auto".equals(binding)) {
         continue;
       }
       switch (keymap.getType(binding)) {
         case COMMAND_NAME:
           sb.append("**")
               .append(binding)
               .append("** ")
               .append(keymap.getCommandName(binding))
               .append("\n\n");
           break;
         case FUNCTION:
           sb.append("**")
               .append(binding)
               .append("** ")
               .append(keymap.getFunctionSource(binding))
               .append("\n\n");
           break;
         default:
           break;
       }
     }
     sb.append("\n");
   }
   return sb.toString();
 }
  private void initKeyBindings() {

    this.keyBindings = CMKeymapOverlay.create();

    this.keyBindings.addBinding(
        "Shift-Ctrl-K",
        this,
        new CMKeyBindingAction<CodeMirrorEditorWidget>() {

          public void action(final CodeMirrorEditorWidget editorWidget) {
            LOG.fine("Keybindings help binding used.");
            editorWidget.keybindingHelp();
          }
        });

    this.editorOverlay.addKeyMap(this.keyBindings);
  }