2015-12-09 8 views
1

Я пишу плагин для eclipse (Kepler) CDT на окнах 8.1. Мой плагин расширяет затмение и позволяет пользователю создавать проект с определенными конфигурациями. Я хочу, чтобы все мои проекты плагинов были с одинаковым кодом c-кода. Так что в моем плагине коде, при создании проект файлов и конфигурации, я добавил следующий код, чтобы добавить разыскиваемый формат:eclipse cdt plugin: Как программировать применять 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(); 

Этот код действительно делает свою работу и настраивает формат, как я хочу, но сгенерированный формат существует только в свойствах проекта и не применяется. Если я хочу, чтобы применить формат и вызывать файлы, чтобы показать с этим форматом, я должен нажать на применить кнопку, или нажать CTRL + SHIFT + F.

Знаете ли вы о любом способе применения программируемой формы, хотя каждый проект будет сгенерирован с его автоматически сгенерированными файлами, которые уже отформатированы?

+0

Вы смотрели на команду CTRL +SHIFT + F связан? Можете ли вы запустить эту команду на входах? –

ответ

1

Я нашел решение своей проблемы. спасибо @Bananewizen за помощь! Я обнаружил, что идентификатор команды за ctrl + shift + f: 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) {} 
} 

Теперь ручка находится и работает хорошо!

1

Вы должны быть в состоянии найти идентификатор команды, используя либо шпионское меню Eclipse (Alt-Shift-F2), либо просматривая привязку клавиш для форматирования в ключевых предпочтениях или импортируя плагин cdt.ui в качестве источника плагин в ваш рабочий стол.

Когда у вас есть идентификатор команды, вы можете использовать execute it programmatically с помощью службы команд.

+0

Прежде всего - спасибо! Я нашел идентификатор команды как ICEditorActionDefinitionIds.FORMAT. но теперь я не могу выполнить эту командную программируемость, так как, когда я использую функцию handlerService.executeCommand(), я получаю это исключение: «Обработчик не выполняется для команды». Есть идеи? – user1835297

+0

Не совсем так, как я делал это только с помощью очень простых команд. Я предполагаю, что плагин, содержащий фактический _handler_ для команды, не загружается в вашу среду выполнения. Но, похоже, это вряд ли возможно, так как вы, вероятно, полагаетесь на несколько плагинов CDT. Вы все равно можете попытаться получить команду из CommandService (не HandlerService) и выполнить ее самостоятельно, но это, похоже, не рекомендуется. – Bananeweizen