Подсветка синтаксиса Gtksourceviewmm не работает

Я пытаюсь использовать оболочку C ++ gtksourceview, я сделал это давным-давно, и я помню, что она работала, но теперь все работает, кроме синтаксиса highlight. И я не совсем уверен, что это такое. Надеюсь, вы мне поможете, я много читал об этой библиотеке в Интернете, но я могу найти решение. Вот простой код. Заранее спасибо.

#include "twindow.h"#include <iostream>

TWindow::TWindow() {

add(m_SourceView);

m_SourceView.set_size_request(640, 480);
m_SourceView.set_show_line_numbers();
m_SourceView.set_tab_width(4);
m_SourceView.set_auto_indent();
m_SourceView.set_show_right_margin();
m_SourceView.set_right_margin_position(80);
m_SourceView.set_highlight_current_line();
m_SourceView.set_smart_home_end(gtksourceview::SOURCE_SMART_HOME_END_ALWAYS);

gtksourceview::init ();

Glib::RefPtr<gtksourceview::SourceBuffer> buffer = m_SourceView.get_source_buffer () ;
if (!buffer) {
std::cerr << "gtksourceview::SourceView::get_source_buffer () failed" << std::endl ;
}

buffer->begin_not_undoable_action();
buffer->set_text(Glib::file_get_contents("main.c"));
buffer->end_not_undoable_action();

buffer->set_highlight_syntax(true);

Glib::RefPtr<gtksourceview::SourceLanguageManager> language_manager = gtksourceview::SourceLanguageManager::create();
Glib::RefPtr<gtksourceview::SourceLanguage> language = gtksourceview::SourceLanguage::create();

language = language_manager->get_language("c");

buffer->set_language(language);

show_all_children();
}

0

Решение

Итак, вы хотите использовать оболочку c ++ из gtksourceview, поэтому я думаю, что вы хотите использовать gtksourceviewmm.

Почему вы создаете LanguageManager, вы можете использовать по умолчанию.
Если вы используете 3.2 gtksourceviewmm, то посмотрите на документы.

Вы также должны проверить эта функция.

Таким образом, пример будет выглядеть так;

Glib::ustring file_path = "/home/user/whatever/main.c";
Glib::RefPtr<Gsv::LanguageManager> language_manager = Gsv::LanguageManager::get_default();
Glib::RefPtr<Gsv::Language> language = language_manager->guess_language(file_path, Glib::ustring());

Еще одна вещь, которую я хочу упомянуть, это то, что вы должны создать буфер для отображения содержимого файла, так как в моих проектах я получил ошибку сегмента, когда хотел использовать get_source_buffer()так что, по-видимому, он по умолчанию равен нулю.

Glib::RefPtr<Gsv::Buffer> buffer = Gsv::Buffer::create(language);
buffer->set_text(Glib::get_file_contents(file_path));
this->m_SourceView.set_source_buffer(buffer);
1

Другие решения


По вопросам рекламы [email protected]