Eclipse plugin EclipseCDT插件:如何应用c代码格式化程序进行编程

Eclipse plugin EclipseCDT插件:如何应用c代码格式化程序进行编程,eclipse-plugin,format,eclipse-cdt,preferences,Eclipse Plugin,Format,Eclipse Cdt,Preferences,我正在为Windows8.1上的eclipse(开普勒)CDT编写一个插件。 我的插件扩展了eclipse,使用户能够创建具有特定配置的项目。 我希望我所有的插件项目都使用相同的c代码格式。因此,在我的插件代码中,在创建项目文件和配置时,我添加了以下代码以添加所需的格式: ProjectScope=新的ProjectScope(项目); IEclipsePreferences=scope.getNode(“org.eclipse.cdt.core”); ref.put(“org.eclipse.

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

ProjectScope=新的ProjectScope(项目);
IEclipsePreferences=scope.getNode(“org.eclipse.cdt.core”);
ref.put(“org.eclipse.cdt.core.formatter.lineSplit”,“100”);
ref.put(“org.eclipse.cdt.core.formatter.alignment”用于方法声明中的参数;
ref.put(“org.eclipse.cdt.core.formatter.brake_position_for_block”,“next_line”);
ref.put(“org.eclipse.cdt.core.formatter.brake\u position\u用于方法声明”,“下一行”);
ref.put(“org.eclipse.cdt.core.formatter.tablation.char”,“space”);
ref.put(“org.eclipse.cdt.core.formatter.alignment”用于方法调用中的参数;
ref.put(“org.eclipse.cdt.core.formatter.alignment\u for\u constructor\u initializer\u list”,“16”);
参考flush();
这段代码确实完成了它的工作,并按照我的要求配置了格式,但生成的格式只存在于项目属性中,尚未应用。如果要应用该格式并使文件以该格式显示,则必须单击“应用”按钮,或按CTRL+SHIFT+F


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

您应该能够使用Eclipse菜单spy(Alt-Shift-F2)找到命令ID或者在key preferences中查找格式化程序的键绑定,或者将cdt.ui插件作为源插件导入工作台


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

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

@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) {}
}

现在把手找到了,它工作得很好

你看过CTRL+SHIFT+F绑定到的命令了吗?你能在输入端运行这个命令吗?首先-谢谢!我发现命令id为iceditorActionDefinitionID.FORMAT。但现在,我无法执行这个命令的可编程性,因为当我使用handlerService.executeCommand()函数时,我遇到了这样一个异常:“命令没有可执行的处理程序”。知道吗?不知道,因为我只使用了非常基本的命令。我假设包含命令实际处理程序的插件没有加载到运行时中。但这似乎不太可能,因为我想您可能依赖于几种CDT插件。您仍然可以尝试从CommandService(而不是HandlerService)获取命令并自己执行,但这似乎不是推荐的方法。