如何更改自动完成保管箱中的字体大小

zet*_*tah 2 11.04 gtkrc

截屏:

截屏

我可能需要更改主题gtkrc文件中的某些内容,但我找不到需要更改的内容,因此我将字体大小减小了一个单位

仅供参考,我在 SO 上发现了类似的问题(尽管它是关于 Ubuntu 11.10):How to change the highlight color in autocomplete box in Eclipse,这表明即使 Eclipse也在系统设置中使用它,但更令人困惑的字体是更小(就像我想要的那样)

ben*_*nwh 6

我不相信 gtkrc 修改是可能的。

即使您将此代码添加到 gtkrc 的末尾:

style "fontchangetest" {
    font_name = "Sans 20"
}

class "GtkWidget" style "fontchangetest"
Run Code Online (Sandbox Code Playgroud)

重新启动 Geany(或任何与此相关的 GTK2 应用程序),许多 UI 小部件将采用此属性,但是实际的代码编辑器和自动完成列表将保留由 Geany 指定的字体。

但是,让我们查看源代码:

apt-get source geany
cd geany-0.20
Run Code Online (Sandbox Code Playgroud)

自动完成框的字体在 scintilla/ScintillaBase.cxx 第 264 行中定义:

ac.lb->SetFont(vs.styles[STYLE_DEFAULT].font);
Run Code Online (Sandbox Code Playgroud)

SetFont函数仅用于自动完成列表框(使用“ ack SetFont”验证),因此更改它没有任何害处。

打开 scintilla/PlatGTK.cxx,导航到第 2029 行。您将看到以下代码:

void ListBoxX::SetFont(Font &scint_font) {
    // Only do for Pango font as there have been crashes for GDK fonts
    if (Created() && PFont(scint_font)->pfd) {
        // Current font is Pango font
        gtk_widget_modify_font(PWidget(list), PFont(scint_font)->pfd);
    }
}
Run Code Online (Sandbox Code Playgroud)

替换为:

void ListBoxX::SetFont(Font &scint_font) {
    // Only do for Pango font as there have been crashes for GDK fonts
    if (Created() && PFont(scint_font)->pfd) {
        // Current font is Pango font
        PangoFontDescription* pf = pango_font_description_from_string("Sans 6");
        gtk_widget_modify_font(PWidget(list), pf);
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,您可以将“Sans 6”更改为您喜欢的任何字体和大小。这是一个非常hacky的解决方案,但是我不知道C/C++所以也许有一种更优雅的方法来做到这一点。

然后你可以:

./configure && make && sudo make install
Run Code Online (Sandbox Code Playgroud)

进行快速编译和安装(尽管强烈建议先删除现有的 geany 包)

或者更正确的方法:

sudo aptitude install build-essential devscripts ubuntu-dev-tools \
debhelper dh-make diff patch cdbs quilt gnupg fakeroot lintian \
pbuilder piuparts intltool chrpath

debuild
cd ..
sudo dpkg -i geany_0.20-1.1ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

构建一个包含更改的新包,然后安装它。