0

私は C++ ラッパー gtksourceview を使用しようとしています。これはずっと前に作成したもので、機能していたことを覚えていますが、現在はハイライト構文を除いてすべて機能しています。そして、それが何であるかはよくわかりません。インターネットでこのライブラリについてよく読んでいますが、解決策を見つけることができます。ここに簡単なコードがあります。前もって感謝します。

#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();
}
4

1 に答える 1

1

gtksourceview の C++ ラッパーを使いたいので、gtksourceviewmm を使いたいと思います。

を作成する理由はLanguageManager、デフォルトのものを使用できます。gtksourceviewmm の 3.2 を使用している場合は、docsを参照してください。

この機能もチェックしてください。

例は次のようになります。

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());

私が言及したいもう1つのことは、ファイルの内容を表示するバッファを作成する必要があるということです.私のプロジェクトでは、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);
于 2014-10-10T02:24:03.087 に答える