eclipse cdt 插件:如何可编程性应用 c 代码格式化程序

eclipse cdt plugin: How to programmability apply c code formatter

我正在 windows 8.1 上为 eclipse(Kepler) CDT 编写一个插件。 我的插件扩展了 eclipse 并使用户能够创建具有特定配置的项目。 我希望我所有的插件项目都具有相同的 C 代码格式。所以在我的插件代码中,在创建项目文件和配置时,我添加了以下代码以添加所需的格式:

ProjectScope scope = new ProjectScope(project);
IEclipsePreferences ref = scope.getNode("org.eclipse.cdt.core");
ref.put("org.eclipse.cdt.core.formatter.lineSplit", "100");
ref.put("org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration", "18");
ref.put("org.eclipse.cdt.core.formatter.brace_position_for_block", "next_line");
ref.put("org.eclipse.cdt.core.formatter.brace_position_for_method_declaration", "next_line");
ref.put("org.eclipse.cdt.core.formatter.tabulation.char", "space");
ref.put("org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation", "18");
ref.put("org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list", "16");
ref.flush();

这段代码确实完成了它的工作并按照我的意愿配置了格式,但生成的格式仅存在于项目属性中,尚未应用。如果我想应用该格式并使文件以这种格式显示,我必须单击 apply 按钮,或按 CTRL+ SHIFT+F

您是否知道应用格式可编程性的任何方法,尽管每个项目都将使用其已经格式化的自动生成文件生成?

您应该能够使用 Eclipse 菜单间谍 (Alt-Shift-F2) 或通过在键首选项中查找格式化程序的键绑定或通过导入 cdt.ui 来找到命令 ID插件作为源插件到您的 workbench.

有了命令 ID 后,就可以execute it programmatically 使用命令服务了。

我找到了解决问题的方法。感谢@Bananewizen 的帮助! 我发现ctrl+shift+f后面的命令id是:ICEditorActionDefinitionIds.FORMAT 我成功地 运行 命令可编程性,但我必须处理文件加载以格式化其代码。所以我实现了 IPartListener,在 partOpened 函数中,我写道:

@Override
public void partOpened(IWorkbenchPart part) {
    try {
        IFile file = (IFile) part.getSite().getPage().getActiveEditor().getEditorInput().getAdapter(IFile.class);
            final String cmdName = ICEditorActionDefinitionIds.FORMAT;
            IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
            try {
                handlerService.executeCommand(cmdName, null);
            } catch (Exception e) {}
    } catch (Exception e) {}
}

现在句柄找到了,效果很好!