Search in sources :

Example 16 with Keymap

use of com.intellij.openapi.keymap.Keymap in project intellij-community by JetBrains.

the class KeymapGenerator method main.

@Override
public void main(String[] args) {
    ActionManager actionManager = ActionManager.getInstance();
    StringBuilder xml = new StringBuilder();
    xml.append("<Keymaps>\n");
    for (Keymap keymap : KeymapManagerEx.getInstanceEx().getAllKeymaps()) {
        xml.append("  <Keymap name=\"").append(keymap.getPresentableName()).append("\">\n");
        for (String id : keymap.getActionIdList()) {
            String shortcuts = KeymapUtil.getShortcutsText(keymap.getShortcuts(id));
            if (!StringUtil.isEmpty(shortcuts)) {
                AnAction action = actionManager.getAction(id);
                xml.append("    <Action id=\"").append(id).append("\">\n");
                Set<String> addedShortcuts = new THashSet<>();
                for (Shortcut shortcut : keymap.getShortcuts(id)) {
                    // Different shortcuts may have equal display strings (e.g. shift+minus and shift+subtract)
                    // We don't want them do be duplicated for users
                    String shortcutText = KeymapUtil.getShortcutText(shortcut);
                    if (addedShortcuts.add(shortcutText)) {
                        xml.append("      <Shortcut>").append(shortcutText).append("</Shortcut>\n");
                    }
                }
                if (action != null) {
                    String text = action.getTemplatePresentation().getText();
                    if (text != null) {
                        xml.append("      <Text>").append(StringUtil.escapeXml(text)).append("</Text>\n");
                    }
                }
                xml.append("    </Action>\n");
            }
        }
        xml.append("  </Keymap>\n");
    }
    xml.append("</Keymaps>");
    final String path = args.length == 2 ? args[1] : PathManager.getHomePath() + File.separator + "AllKeymaps.xml";
    File out = new File(path);
    try {
        FileUtil.writeToFile(out, xml.toString());
        System.out.println("Saved to: " + out.getAbsolutePath());
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    System.exit(0);
}
Also used : ActionManager(com.intellij.openapi.actionSystem.ActionManager) Shortcut(com.intellij.openapi.actionSystem.Shortcut) IOException(java.io.IOException) AnAction(com.intellij.openapi.actionSystem.AnAction) File(java.io.File) Keymap(com.intellij.openapi.keymap.Keymap) THashSet(gnu.trove.THashSet)

Example 17 with Keymap

use of com.intellij.openapi.keymap.Keymap in project intellij-community by JetBrains.

the class TipUIUtil method updateShortcuts.

private static void updateShortcuts(StringBuffer text) {
    int lastIndex = 0;
    while (true) {
        lastIndex = text.indexOf(SHORTCUT_ENTITY, lastIndex);
        if (lastIndex < 0)
            return;
        final int actionIdStart = lastIndex + SHORTCUT_ENTITY.length();
        int actionIdEnd = text.indexOf(";", actionIdStart);
        if (actionIdEnd < 0) {
            return;
        }
        final String actionId = text.substring(actionIdStart, actionIdEnd);
        String shortcutText = getShortcutText(actionId, KeymapManager.getInstance().getActiveKeymap());
        if (shortcutText == null) {
            Keymap defKeymap = KeymapManager.getInstance().getKeymap(DefaultKeymap.getInstance().getDefaultKeymapName());
            if (defKeymap != null) {
                shortcutText = getShortcutText(actionId, defKeymap);
                if (shortcutText != null) {
                    shortcutText += " in default keymap";
                }
            }
        }
        if (shortcutText == null) {
            shortcutText = "<no shortcut for action " + actionId + ">";
        }
        text.replace(lastIndex, actionIdEnd + 1, shortcutText);
        lastIndex += shortcutText.length();
    }
}
Also used : Keymap(com.intellij.openapi.keymap.Keymap) DefaultKeymap(com.intellij.openapi.keymap.impl.DefaultKeymap)

Example 18 with Keymap

use of com.intellij.openapi.keymap.Keymap in project intellij-community by JetBrains.

the class PreviewManagerImpl method checkGlobalState.

protected void checkGlobalState() {
    ToolWindowManagerImpl toolWindowManager = (ToolWindowManagerImpl) ToolWindowManager.getInstance(myProject);
    if (!isAvailable() && toolWindowManager.getToolWindow(ToolWindowId.PREVIEW) != null) {
        myHistory.clear();
        myContentManager.removeAllContents(true);
        toolWindowManager.unregisterToolWindow(ToolWindowId.PREVIEW);
        return;
    }
    if (isAvailable() && toolWindowManager.getToolWindow(ToolWindowId.PREVIEW) == null) {
        myToolWindow = (ToolWindowImpl) toolWindowManager.registerToolWindow(ToolWindowId.PREVIEW, myEmptyStatePanel, ToolWindowAnchor.RIGHT, myProject, false);
        myContentManager = myToolWindow.getContentManager();
        myToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowPreview);
        myToolWindow.setContentUiType(ToolWindowContentUiType.COMBO, null);
        myToolWindow.setAutoHide(true);
        myEmptyStateContent = myContentManager.getContent(0);
        final MoveToStandardViewAction moveToStandardViewAction = new MoveToStandardViewAction();
        myContentManager.addContentManagerListener(new ContentManagerAdapter() {

            @Override
            public void selectionChanged(ContentManagerEvent event) {
                if (myInnerSelectionChange || event.getOperation() != ContentManagerEvent.ContentOperation.add)
                    return;
                PreviewInfo previewInfo = event.getContent().getUserData(INFO_KEY);
                if (previewInfo != null) {
                    preview(previewInfo, false);
                    myToolWindow.setTitleActions(previewInfo.supportsStandardPlace() ? moveToStandardViewAction : null);
                }
            }
        });
        moveToStandardViewAction.registerCustomShortcutSet(new ShortcutSet() {

            @NotNull
            @Override
            public Shortcut[] getShortcuts() {
                Keymap keymap = KeymapManager.getInstance().getActiveKeymap();
                return keymap.getShortcuts("ShowContent");
            }
        }, myToolWindow.getComponent());
        myToolWindow.setTitleActions(moveToStandardViewAction);
        ArrayList<AnAction> myGearActions = new ArrayList<>();
        for (PreviewPanelProvider provider : myProviders) {
            myGearActions.add(new ContentTypeToggleAction(provider));
        }
        myToolWindow.setAdditionalGearActions(new DefaultActionGroup("Preview", myGearActions));
        myToolWindow.activate(() -> myToolWindow.activate(null));
    }
}
Also used : ToolWindowManagerImpl(com.intellij.openapi.wm.impl.ToolWindowManagerImpl) PreviewPanelProvider(com.intellij.openapi.preview.PreviewPanelProvider) ContentManagerAdapter(com.intellij.ui.content.ContentManagerAdapter) NotNull(org.jetbrains.annotations.NotNull) PreviewInfo(com.intellij.openapi.preview.PreviewInfo) ContentManagerEvent(com.intellij.ui.content.ContentManagerEvent) Keymap(com.intellij.openapi.keymap.Keymap)

Example 19 with Keymap

use of com.intellij.openapi.keymap.Keymap in project intellij-community by JetBrains.

the class KeymapsTestCase method testDuplicateShortcuts.

public void testDuplicateShortcuts() {
    StringBuilder failMessage = new StringBuilder();
    Map<String, Map<String, List<String>>> knownDuplicates = getKnownDuplicates();
    for (Keymap keymap : KeymapManagerEx.getInstanceEx().getSchemeManager().getAllSchemes()) {
        String failure = checkDuplicatesInKeymap((KeymapImpl) keymap, knownDuplicates);
        if (failMessage.length() > 0) {
            failMessage.append("\n");
        }
        failMessage.append(failure);
    }
    if (failMessage.length() > 0) {
        TestCase.fail(failMessage + "\n" + "Please specify 'use-shortcut-of' attribute for your action if it is similar to another action (but it won't appear in Settings/Keymap),\n" + "reassign shortcut or, if absolutely must, modify the 'known duplicates list'");
    }
}
Also used : THashMap(gnu.trove.THashMap) FactoryMap(com.intellij.util.containers.FactoryMap) MacOSDefaultKeymap(com.intellij.openapi.keymap.impl.MacOSDefaultKeymap) Keymap(com.intellij.openapi.keymap.Keymap)

Example 20 with Keymap

use of com.intellij.openapi.keymap.Keymap in project intellij-community by JetBrains.

the class KeymapsTestCase method testValidActionIds.

public void testValidActionIds() {
    THashSet<String> unknownActions = new THashSet<>();
    collectUnknownActions(unknownActions);
    @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") Map<String, List<String>> missingActions = new FactoryMap<String, List<String>>() {

        @Override
        protected Map<String, List<String>> createMap() {
            return new LinkedHashMap<>();
        }

        @Nullable
        @Override
        protected List<String> create(String key) {
            return new ArrayList<>();
        }
    };
    for (Keymap keymap : KeymapManagerEx.getInstanceEx().getAllKeymaps()) {
        List<String> ids = new ArrayList<>(keymap.getActionIdList());
        ids.sort(null);
        assertThat(ids).isEqualTo(new ArrayList<>(new LinkedHashSet<>(ids)));
        for (String cid : ids) {
            if (unknownActions.contains(cid))
                continue;
            AnAction action = ActionManager.getInstance().getAction(cid);
            if (action == null) {
                if (OUTPUT_TEST_DATA) {
                    System.out.print("\"" + cid + "\", ");
                } else {
                    missingActions.get(keymap.getName()).add(cid);
                }
            }
        }
    }
    List<String> reappearedAction = new ArrayList<>();
    for (String id : unknownActions) {
        AnAction action = ActionManager.getInstance().getAction(id);
        if (action != null) {
            reappearedAction.add(id);
        }
    }
    if (!missingActions.isEmpty() || !reappearedAction.isEmpty()) {
        StringBuilder message = new StringBuilder();
        if (!missingActions.isEmpty()) {
            for (Map.Entry<String, List<String>> keymapAndActions : missingActions.entrySet()) {
                message.append("Unknown actions in keymap ").append(keymapAndActions.getKey()).append(", add them to unknown actions list:\n");
                for (String action : keymapAndActions.getValue()) {
                    message.append("\"").append(action).append("\",").append("\n");
                }
            }
        }
        if (!reappearedAction.isEmpty()) {
            message.append("The following actions have reappeared, remove them from unknown action list:\n");
            for (String action : reappearedAction) {
                message.append(action).append("\n");
            }
        }
        fail("\n" + message);
    }
}
Also used : FactoryMap(com.intellij.util.containers.FactoryMap) AnAction(com.intellij.openapi.actionSystem.AnAction) THashSet(gnu.trove.THashSet) THashMap(gnu.trove.THashMap) FactoryMap(com.intellij.util.containers.FactoryMap) MacOSDefaultKeymap(com.intellij.openapi.keymap.impl.MacOSDefaultKeymap) Keymap(com.intellij.openapi.keymap.Keymap)

Aggregations

Keymap (com.intellij.openapi.keymap.Keymap)47 Shortcut (com.intellij.openapi.actionSystem.Shortcut)14 KeymapManagerEx (com.intellij.openapi.keymap.ex.KeymapManagerEx)10 NotNull (org.jetbrains.annotations.NotNull)10 KeyboardShortcut (com.intellij.openapi.actionSystem.KeyboardShortcut)7 Nullable (org.jetbrains.annotations.Nullable)7 AnAction (com.intellij.openapi.actionSystem.AnAction)6 KeymapManager (com.intellij.openapi.keymap.KeymapManager)5 ActionManager (com.intellij.openapi.actionSystem.ActionManager)4 MacOSDefaultKeymap (com.intellij.openapi.keymap.impl.MacOSDefaultKeymap)4 Pair (com.intellij.openapi.util.Pair)4 FactoryMap (com.intellij.util.containers.FactoryMap)4 THashMap (gnu.trove.THashMap)4 THashSet (gnu.trove.THashSet)4 DefaultKeymap (com.intellij.openapi.keymap.impl.DefaultKeymap)2 KeymapImpl (com.intellij.openapi.keymap.impl.KeymapImpl)2 KeymapManagerImpl (com.intellij.openapi.keymap.impl.KeymapManagerImpl)2 ToolWindow (com.intellij.openapi.wm.ToolWindow)2 KeyEvent (java.awt.event.KeyEvent)2 NonNls (org.jetbrains.annotations.NonNls)2