Jump to content

    
KnightIgor

Подсветка пользовательских ключевых слов в Eclipse (C/C++)

Recommended Posts

На такой вопрос от 2008 года я уже набрел на этом форуме, но ответа там не было. Я в ту ветку написал, но последняя запись там - от 2017, потому не бейте ногами, что я замутил эту тему вновь.

Вопрос прост: в STM32CubeIDE, которая базируется на eclipse, я хочу конкретно подкрасить bool, false и true (а может и еще что). В отличие от KEIL IDE, где просто надо добавить эти слова в соответствующий список, в eclipse как-то все сложно: поиск google дает какие-то java скрипты, которые не ясно мне, куда писать и как исполнять. Потому вопрос: как добавить свое в список ключевых слов в редакторе, заточенном под C\C++? Если можно, объяснить как для чайников.

Share this post


Link to post
Share on other sites

Я добавлял себе в старые проекты, не заточенные под GCC компилятор, файлик eclipse-pic-compat.h следующего вида:
 

#ifndef ECLIPSE_PIC_COMPAT_H_
#define ECLIPSE_PIC_COMPAT_H_

// define macro "ECLIPSE_MPLAB_PROJECT" to avoid eclipse parser errors
#ifdef ECLIPSE_MPLAB_PROJECT

#define interrupt
#define low_priority    // interrupt
#define high_priority    // interrupt
#define __bit char
#define __nonreentrant
#define intrinsic(X) "void"

// NOTE: добавлять сюда extern-заглушки для всех использующихся определений вида extern volatile TXSTA1bits_t TXSTA1bits @ 0xFAC из файла описания МК библиотеки xc8\...\include
extern PORTAbits_t PORTAbits;
extern PORTBbits_t PORTBbits;
extern PORTCbits_t PORTCbits;
extern OSCCONbits_t OSCCONbits;
extern INTCONbits_t INTCONbits;

#endif    // ECLIPSE_MPLAB_PROJECT

#endif /* ECLIPSE_PIC_COMPAT_H_ */

Ну и в проекте в начале main.h его подключал. В свойствах проекта прописывал определение ECLIPSE_MPLAB_PROJECT

Убивает двух зайцев - подсветка пользовательских слов и исключение ошибок встроенного парсера GCC при работе с такими проектами.

Делал такие же файлики для проектов, которые были заточены под кейловский компилятор.

Share this post


Link to post
Share on other sites
2 minutes ago, Aaron said:

Я добавлял себе в старые проекты, не заточенные под GCC компилятор, файлик eclipse-pic-compat.h следующего вида:
 


#ifndef ECLIPSE_PIC_COMPAT_H_
#define ECLIPSE_PIC_COMPAT_H_

// define macro "ECLIPSE_MPLAB_PROJECT" to avoid eclipse parser errors
#ifdef ECLIPSE_MPLAB_PROJECT

#define interrupt
#define low_priority    // interrupt
#define high_priority    // interrupt
#define __bit char
#define __nonreentrant
#define intrinsic(X) "void"

// NOTE: добавлять сюда extern-заглушки для всех использующихся определений вида extern volatile TXSTA1bits_t TXSTA1bits @ 0xFAC из файла описания МК библиотеки xc8\...\include
extern PORTAbits_t PORTAbits;
extern PORTBbits_t PORTBbits;
extern PORTCbits_t PORTCbits;
extern OSCCONbits_t OSCCONbits;
extern INTCONbits_t INTCONbits;

#endif    // ECLIPSE_MPLAB_PROJECT

#endif /* ECLIPSE_PIC_COMPAT_H_ */

Ну и в проекте в начале main.h его подключал. В свойствах проекта прописывал определение ECLIPSE_MPLAB_PROJECT

Убивает двух зайцев - подсветка пользовательских слов и исключение ошибок встроенного парсера GCC при работе с такими проектами.

Делал такие же файлики для проектов, которые были заточены под кейловский компилятор.

Это, конечно, левой ногой с вертушки в глаз тому, кто держит доску.


bool, false и true уже определены. Если я их переопределю, начнется ругня.

Share this post


Link to post
Share on other sites

А почему вы считаете, что они определены? Если вы используете GCC в режиме "Си", то он не знает этих ключевых слов - только в режиме "Си++".

Вы же говорите, что bool, false, true - это пользовательские слова (из названия темы). Я вас так и понял.

Дак а вам получается просто нужно раскрасить ключевые слова языка, уже имеющиеся и распознаваемые Eclipse. Был проект то ли на github, то ли на sourceforge, который позволял собственные темы цветовые создавать для Eclipse, я им один раз воспользовался, для себя тему создал, и с ней живу уже десяток лет, ничего не меняя :) Могу поделиться, если надо. Файлик *.epf настроек C Editor Appearance импортируется в каждый новый workspace.

Share this post


Link to post
Share on other sites
1 hour ago, Aaron said:

А почему вы считаете, что они определены? Если вы используете GCC в режиме "Си", то он не знает этих ключевых слов - только в режиме "Си++".

Вы же говорите, что bool, false, true - это пользовательские слова (из названия темы). Я вас так и понял.

Я не считаю, определены ли, я это вижу опытным путем, т.к. я их использую в программе без излишних телодвижений кроме, может быть, #include <stdbool.h>. Однако они не подкрашиваются как другие, а мне бы хотелось. Вот uint8_t, к примеру, подкрашивается, хотя не является встроенным типом, а определен в stdint.h.

Касаемо ЦЕЛОЙ красочной темы: я не хочу изгаляться и извращаться. Мне бы только быстро и просто список раскраски дополнить... А файлик киньте, буду благодарен.

Share this post


Link to post
Share on other sites
2 часа назад, KnightIgor сказал:

Касаемо ЦЕЛОЙ красочной темы: я не хочу изгаляться и извращаться. Мне бы только быстро и просто список раскраски дополнить...

Ответил на Ваш похожий вопрос, заданный в другой теме. Также устанавливал различные цветовые схемы тут (в STM32CubeIDE). Названия этих плагинов подзабыл и на вскидку покамест не могу узнать т.к. некоторое время назад пришлось переустанавливать STM32CubeIDE по некоторым причинам. А когда ее переустановил, то даже не установив снова тот плагин для цветовой схемы, а просто открыв свою старую workspace, получил в итоге все предыдущие цветовые настройки заново (!).

Share this post


Link to post
Share on other sites

Файлик готовый прикрепить не могу, уж извините (прокся только на вход), придётся вам самим создать workspace.epf со следующим содержимым:

Spoiler

#Fri Feb 05 12:39:08 MSK 2016
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariable.color=0,128,159
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariableDeclaration.bold=false
/instance/org.eclipse.cdt.ui/pp_default=0,116,0
/instance/org.eclipse.cdt.ui/editor_folding_enabled=true
/instance/org.eclipse.cdt.ui/closeAngularBrackets=false
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.recognizedTag_bold=true
/instance/org.eclipse.cdt.ui/editor_folding_preprocessor_enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.label.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.class.color=107,117,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroDefinition.strikethrough=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.overloadedOperator.enabled=true
/instance/org.eclipse.cdt.ui/asm_label=210,0,0
/instance/org.eclipse.cdt.ui/c_multi_line_comment_italic=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.functionDeclaration.color=64,64,0
@org.eclipse.cdt.ui=5.3.2.201202111925
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.recognizedTag=94,126,159
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.outline.linktoeditor=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.methodDeclaration.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.overloadedOperator.bold=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.functionDeclaration.underline=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticField.bold=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.externalSDK.enabled=true
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.recognizedTag_italic=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.enum.enabled=true
/instance/org.eclipse.cdt.ui/c_comment_task_tag_italic=true
/instance/org.eclipse.cdt.ui/asm_label_underline=true
/instance/org.eclipse.cdt.ui/c_multi_line_comment=135,163,163
/instance/org.eclipse.cdt.ui/Refactoring.savealleditors=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.enumerator.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.enumerator.italic=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.externalSDK.color=119,111,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.functionDeclaration.strikethrough=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariable.bold=false
/instance/org.eclipse.cdt.ui/spelling_locale=en_US
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroDefinition.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.methodDeclaration.underline=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariableDeclaration.enabled=true
file_export_version=3.0
/instance/org.eclipse.cdt.ui/semanticHighlighting.function.enabled=true
/instance/org.eclipse.cdt.ui/pp_directive=101,0,202
/instance/org.eclipse.cdt.ui/semanticHighlighting.class.enabled=true
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.multi=121,149,176
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.outline.groupmembers=true
/instance/org.eclipse.cdt.ui/c_string_bold=true
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.outline.groupmacros=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.method.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.field.bold=false
/instance/org.eclipse.cdt.ui/editor_folding_statements=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.namespace.color=198,0,198
/instance/org.eclipse.cdt.ui/hoverModifiers=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;\!0;org.eclipse.cdt.ui.ProblemHover;\!0;org.eclipse.cdt.ui.CDocHover;\!0;org.eclipse.cdt.ui.CMacroExpansionHover;\!0;org.eclipse.cdt.ui.CSourceHover;Shift;org.eclipse.cdt.ui.AnnotationHover;\!0;
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroSubstitution.enabled=true
/instance/org.eclipse.cdt.ui/c_braces=0,116,0
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.single=156,176,197
/instance/org.eclipse.cdt.ui/content_assist_category_order=org.eclipse.mylyn.cdt.ui.parserProposalCategory\:65535\u0000org.eclipse.cdt.ui.templateProposalCategory\:1\u0000org.eclipse.cdt.ui.parserProposalCategory\:2\u0000org.eclipse.cdt.ui.helpProposalCategory\:3\u0000org.eclipse.cdt.ui.textProposalCategory\:65539\u0000
/instance/org.eclipse.cdt.ui/semanticHighlighting.namespace.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticField.color=118,130,107
/instance/org.eclipse.cdt.ui/semanticHighlighting.enumerator.color=144,36,163
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.outline.groupincludes=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.problem.enabled=true
\!/=
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariableDeclaration.color=0,128,159
/instance/org.eclipse.cdt.ui/semanticHighlighting.class.bold=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.namespace.bold=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.method.color=67,106,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticField.italic=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.globalVariable.color=145,105,0
/instance/org.eclipse.cdt.ui/c_numbers=144,36,163
/instance/org.eclipse.cdt.ui/editor_folding_default_headers=false
/instance/org.eclipse.cdt.ui/c_numbers_bold=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticMethod.color=125,130,65
/instance/org.eclipse.cdt.ui/pp_header_bold=true
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.outline.groupnamespaces=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.globalVariable.italic=false
/instance/org.eclipse.cdt.ui/c_string=0,0,255
/instance/org.eclipse.cdt.ui/c_type=149,138,0
/instance/org.eclipse.cdt.ui/hoverModifierMasks=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;0;org.eclipse.cdt.ui.ProblemHover;0;org.eclipse.cdt.ui.CDocHover;0;org.eclipse.cdt.ui.CMacroExpansionHover;0;org.eclipse.cdt.ui.CSourceHover;131072;org.eclipse.cdt.ui.AnnotationHover;0;
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.multi_italic=true
/instance/org.eclipse.cdt.ui/asm_directive=0,116,0
/instance/org.eclipse.cdt.ui/sourceHoverBackgroundColor=228,242,218
/instance/org.eclipse.cdt.ui/semanticHighlighting.field.enabled=true
/instance/org.eclipse.cdt.ui/c_default=0,116,0
/instance/org.eclipse.cdt.ui/sourceHoverBackgroundColor.SystemDefault=false
/instance/org.eclipse.cdt.ui/spelling_user_dictionary_encoding=
/instance/org.eclipse.cdt.ui/c_keyword=0,116,0
/instance/org.eclipse.cdt.ui/content_assist_parameters_foreground=0,116,0
/instance/org.eclipse.cdt.ui/c_operators=0,0,0
/instance/org.eclipse.cdt.ui/content_assist_proposals_foreground=0,116,0
/instance/org.eclipse.cdt.ui/c_comment_task_tag=80,148,147
/instance/org.eclipse.cdt.ui/semanticHighlighting.label.underline=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.function.color=64,64,0
/instance/org.eclipse.cdt.ui/scalability.reconciler=false
/instance/org.eclipse.cdt.ui/editor_folding_default_inactive=false
/instance/org.eclipse.cdt.ui/spelling_locale_initialized=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.typedef.color=155,113,0
/instance/org.eclipse.cdt.ui/c_single_line_comment_italic=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.methodDeclaration.color=67,106,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticMethod.italic=false
/instance/org.eclipse.cdt.ui/scalability.numberOfLines=10000
/instance/org.eclipse.cdt.ui/spelling_ignore_string_literals=true
/instance/org.eclipse.cdt.ui/closeBrackets=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.localVariable.enabled=true
/instance/org.eclipse.cdt.ui/stickyOccurrences=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.enum.bold=true
/instance/org.eclipse.cdt.ui/content_assist_parameters_background=249,252,247
/instance/org.eclipse.cdt.ui/semanticHighlighting.parameterVariable.color=0,80,159
/instance/org.eclipse.cdt.ui/semanticHighlighting.label.bold=true
/instance/org.eclipse.cdt.ui/pp_header=0,47,255
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroSubstitution.color=170,85,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroDefinition.underline=false
/instance/org.eclipse.cdt.ui/content_assist_disabled_computers=org.eclipse.cdt.ui.parserProposalCategory\u0000org.eclipse.cdt.ui.textProposalCategory\u0000
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticMethod.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.typedef.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.functionDeclaration.enabled=true
/instance/org.eclipse.cdt.ui/scalability.detect=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.externalSDK.bold=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.staticField.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.methodDeclaration.strikethrough=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.globalVariable.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.typeParameter.enabled=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.function.bold=false
/instance/org.eclipse.cdt.ui/content_assist_proposals_background=249,252,247
/instance/org.eclipse.cdt.ui/semanticHighlighting.enumerator.bold=false
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.ui.editor.UseStructuralMode=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.macroDefinition.color=170,85,0
/instance/org.eclipse.cdt.ui/semanticHighlighting.enum.color=144,36,163
/instance/org.eclipse.cdt.ui/semanticHighlighting.field.color=36,147,108
/instance/org.eclipse.cdt.ui/org.eclipse.cdt.internal.ui.text.doctools.doxygen.single_italic=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.label.color=196,0,0
/instance/org.eclipse.cdt.ui/editor_folding_default_structures=false
/instance/org.eclipse.cdt.ui/semanticHighlighting.typedef.bold=true
/instance/org.eclipse.cdt.ui/semanticHighlighting.typeParameter.color=136,93,59
/instance/org.eclipse.cdt.ui/c_single_line_comment=149,186,185
/instance/org.eclipse.cdt.ui/semanticHighlighting.parameterVariable.enabled=true
/instance/org.eclipse.cdt.ui/markOverloadedOperatorsOccurrences=true

 

Можете поиграться, потом оставить только нужные вам строки semanticHighlighting. Мою цветовую схему прошу не критиковать, все галстуки на вкус разные ;)

 

Share this post


Link to post
Share on other sites
4 часа назад, Aaron сказал:

придётся вам самим создать workspace.epf

Необязательно такое имя (насколько знаю). Я например просто пишу "settings_2706_NotePad_PP_02.epf", а потом импортирую эти настройки (этот файл). Импортировать нужно выбрав соотв. значок в левом нижнем углу окна "Preferences" (в меню "Window->Preferences").

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.