如何将 Go 添加到 gitg 的可见源列表?

Posted

技术标签:

【中文标题】如何将 Go 添加到 gitg 的可见源列表?【英文标题】:How do I add the Go to gitg's list of viewable sources? 【发布时间】:2011-02-14 07:56:57 【问题描述】:

我刚刚开始第一次“git”,并从 Ubuntu 10.4 / AMD64 发行版安装了 git 和 gitg(即,可能不是“最新”版本,但不是古老的)。

我正在尝试查看我通过 gitg 提交的 go 代码,并在“树选项卡”中显示:

Cannot display file content as text.

但是,“详细信息选项卡”可以很好地显示同一文件的差异。 我知道 gitg 的“树形选项卡”正在工作,因为我可以在 *.c / *.html / *.txt 等上使用树形视图。

<question> 有没有办法让 gitg 理解“*.go”只是文本? </question>

更多上下文:

安装的 gitg 版本是 0.0.5 - 即最新版本 - 0.0.6 - 我现在正在寻找的源代码。

我确实有一个工作的/usr/share/gtksourceview-2.0/language-specs/go.lang。 它在 gedit 中作为荧光笔工作得很好。 看来 gitg 可能需要可显示文件的 mime 类型为“text/plain”,所以我将其添加到 go.lang

没有快乐。 gitg 在*.go 上仍然失败。 我相对确定修复很简单,只是不知道在哪里看。

【问题讨论】:

【参考方案1】:

当谈到 gitg alt text http://trac.novowork.com/gitg/chrome/site/logo.png(针对 gtk+/GNOME 的 git 存储库查看器)时,look at its code (also here) 可能会很有趣:

特别是,gitg-commit-view.c 显示该消息,因为它的函数 gitg_utils_can_display_content_type() 返回用于文本显示目的的未知类型。

gboolean
gitg_utils_can_display_content_type(gchar const *content_type)

        return g_content_type_is_a(content_type, "text/plain") || 
                   g_content_type_equals(content_type, "application/octet-stream");

因此,您确实需要将 go 文件类型声明为 text/plain(在 gitg 中,而不是“to go.lang”),它应该可以工作。


其实gitg中没有声明:g_content_type_is_aglib\gio\gcontenttype.c(project glib)的函数,它调用get_registry_classes_key(),读取注册表(HKEY_CLASSES_ROOT对于 Windows,mime type registered for Unix)。

所以如果你注册了 go 文件,它应该可以工作:

xdg-icon-resource install --context mimetypes --size 48 go-type.png plain/text

要注册的 xml 文件(由OP Hotei 找到,干得好!)

<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
  <mime-type type="application/x-extension-go">
    <sub-class-of type="text/plain"/>
    <comment>go for files</comment>
    <glob pattern="*.go"/>
  </mime-type>
</mime-info>

xdg-mime install go-mime.xml
update-desktop-database

【讨论】:

VonC,看到那条线。我假设 gitg 在决定哪些文件是可显示的时是“表驱动的”,并且它会询问 gtk 的答案。然后 Gtk 将在 sourceview-2.0 目录中查找并检查 *.lang 是否匹配。我以前没有使用过 GTK,所以这是一个猜测,但我相对确定它是正确的。我寻找这里提到的函数...返回 g_content_type_is_a(content_type, "text/plain") 但 gitg/gitg 目录中的 grep 返回 nil。这让我相信这个函数是 gtk 包的一部分,而不是 gitg。仍在搜索... @Hotei:同样的 grep,同样的结果! @Hotei:右:部分 glib (gtk.org/download.html),位于 gio/gcontenttype.c。立即查找。 VonC,运行 xdg-mime install go-mime.xml 没有错误。再次测试 gitg ... 还没有。我觉得我应该使用“update-mime-database /usr/share/mime”来更新 mime 数据库,但是在这样做之后,我收到了一些错误消息,但仍然没有乐趣。 /usr/share/mime/text 目录中没有 x-go.xml,这告诉我安装/更新“不完整”。所以目前我仍然卡住了。 @Hotei:该死,我以为我已经搞定了 ;) 你在xdg-mime install 命令之后尝试了update-desktop-database 吗?并尝试在您的命令周围使用简单的引号:有关一些示例,请参见 gitorious.com/listaller/listaller/commit/…。

以上是关于如何将 Go 添加到 gitg 的可见源列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何滚动 ListView 中的项目使其可见?

在键盘打开时将项目添加到 RecyclerView 时向下滚动

当列表视图的项目在颤动的视口中可见时,如何更改项目颜色并执行一些操作?

如何在jQuery中获取可见列表的eq?

将 Textviews 添加到 ListView 中存在的 ViewPager 但 textviews 不可见

如何在appium中获取不可见的页面源?