我正在尝试使用在PyGObject中具有GtkSourceView小部件的Glade文件.我已经写了一篇关于如何在Glade中使用新的GtkSourceView 3.0的小指南:http://cjenkins.wordpress.com/2012/05/08/use-gtksourceview-widget-in-glade/
问题是当我想从PyGObject加载Glade时:
from gi.repository import Gtk, GtkSource
from os.path import abspath, dirname, join
WHERE_AM_I = abspath(dirname(__file__))
class MyApp(object):
def __init__(self):
self.builder = Gtk.Builder()
self.glade_file = join(WHERE_AM_I, 'test.glade')
self.builder.add_from_file(self.glade_file)
if __name__ == '__main__':
try:
gui = MyApp()
Gtk.main()
except KeyboardInterrupt:
pass
Run Code Online (Sandbox Code Playgroud)
当我运行该文件时,我收到此错误:
Traceback (most recent call last):
File "test.py", line 15, in <module>
gui = MyApp()
File "test.py", line 11, in __init__
self.builder.add_from_file(self.glade_file)
File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function
return info.invoke(*args, **kwargs)
gi._glib.GError: Invalid object type `GtkSourceView'
Run Code Online (Sandbox Code Playgroud)
Glade文件(test.glade)只是一个带有GtkSourceView小部件的窗口: …
默认情况下,使用 GtkSourceView 的文本编辑器(例如 Gedit 和 Mousepad)不会突出显示.asm文件。Drew Noakes的解决方案是将 x86 汇编语言的 GtkSourceView 语言定义文件下载到.local/share/gtksourceview-3.0/language-specs/. 我知道如何根据GNOME.org 的 GtkSourceView 文档制作语言定义文件。
但是,我经常使用多个指令集,每个指令集都需要不同的突出显示规则:
它们都可能使用.s或.asm作为文件名后缀,因此<metadata><property name="globs">*.s</property></metadata>似乎不足以区分它们。
有没有一种好方法可以将汇编语言文件的指令集指示给 GtkSourceView 编辑器?特别是,有没有比使用shared-mime-info为每个 ISA 本地定义 Internet 媒体类型更好的方法,使用<magic>,并确保所有协作者也具有相同的本地定义的 Internet 媒体类型?
如何确定文件的 mime 类型(在 OCaml 中)?
我正在尝试为 GtkSourceView 控件设置语言,但为此,我需要首先确定语言。我能看到执行此操作的唯一方法是使用 mime-type - 有一个函数将返回正确的语言,如下所示:
GSourceView.source_languages_manager#get_language_from_mime_type : string -> source_language option
Run Code Online (Sandbox Code Playgroud)
我真的不想将语言硬编码到我的源代码中。如果无法确定 OCaml 中的 mime 类型(在搜索文档后我还没有找到方法),是否有另一种方法可以确定源语言?
所以我正在尝试使用GtkSourceViewmm在C++中使用GtkSourceView,其文档和支持程度给我的印象是它在很长一段时间内都没有经过仔细研究.但我总是乐观主义者:)
我正在尝试使用类似于以下内容的代码添加SourceView:
Glib::RefPtr<gtksourceview::SourceLanguageManager> source_language_manager = gtksourceview::SourceLanguageManager::create();
Glib::RefPtr<gtksourceview::SourceLanguage> source_language = Glib::wrap(gtk_source_language_manager_guess_language(source_language_manager->gobj(), file, NULL));
Glib::RefPtr<gtksourceview::SourceBuffer> source_buffer = gtksourceview::SourceBuffer::create(source_language);
gtksourceview::SourceView* = m_source_view = new gtksourceview::SourceView(source_buffer);
m_vbox.pack_start(*m_source_view);
Run Code Online (Sandbox Code Playgroud)
不幸的是,它吐出了警告
(algoviz:4992):glibmm-WARNING**:无法包装"GtkSourceLanguage"类型的对象.提示:此错误通常是由于未能调用库init()函数引起的.
当我在调试器中查看它时,确实上面的第二行(带有的那一行Glib::wrap())正在返回NULL.我不知道为什么会这样,但我试图通过添加Glib::init()到程序的开头来注意警告,但这似乎根本没有帮助.
我试过谷歌,但一直没有成功.有谁知道Glib要我初始化才能能够进行换行调用?或者,更好的是,是否有人知道使用GtkSourceViewmm的任何工作示例代码(不仅仅是常规的GtkSourceView)?我无法找到任何实际的示例代码,甚至在Google代码搜索中也找不到.
谢谢!
我在GTK和gtksourceview2.0中编写简单的代码编辑器.我想在编辑器中添加一个代码完成窗口.应该有10-15个关键字(总是相同).
任何人都可以给我一些教程的url或描述gtk_source_completion_XXX函数的用法吗?
该文件约状态SourceCompletionProvider:
You must implement this interface to provide proposals to SourceCompletion
Run Code Online (Sandbox Code Playgroud)
"实现此接口"在上下文中意味着什么?
我应该GObject使用这个功能创建新的吗?有什么例子吗?
当我有新的时候GObject,我该如何添加功能(如sourceCompletionProviderGetName)呢?
谢谢
我正在尝试将废弃的Gedit插件代码完成移植到 Python 3。
在原始代码中,一个 Python 2 包被称为:
import gtksourceview2 as gsv
Run Code Online (Sandbox Code Playgroud)
然后它被一个类继承,大概是执行完成:
class JSONProvider(gobject.GObject, gsv.CompletionProvider):
MARK_NAME = 'JSONProviderCompletionMark'
def __init__(self, plugin):
gobject.GObject.__init__(self)
...
Run Code Online (Sandbox Code Playgroud)
我从未使用过 GtkSourceView 或其完成功能,因此不清楚继承正在实现什么。gtksourceview2Python 3 中的等效(或 3)模块是什么?