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(); }