如何更改xterm字体?

如何更改xterm字体?

我创建了一个 .Xresources 文件并向其中添加了以下代码(我只演示了一部分,因为有很多代码):

XTerm*font:*-terminus-medium-r-normal-*-16-*-*-*-*-*-koi8-r 
XTerm*eightBitInput: false
XTerm*utf8: 1
XTerm*locale: 1

! Fonts ====================================================
! set font and fontsize
XTerm*faceName: DejaVu Sans Mono
XTerm*faceSize: 16

! VT Font Menu: Unreadable
xterm*faceSize1: 8
! VT font menu: Tiny
xterm*faceSize2: 10
! VT font menu: Medium
xterm*faceSize3: 12
! VT font menu: Large
xterm*faceSize4: 16
! VT font menu: Huge
xterm*faceSize5: 22


! Ensure that your locale is set up for UTF-8. If you do not use UTF-8, you may need to force xterm to more strictly follow your locale by setting
XTerm.vt100.locale: true
...
XTerm.vt100.translations: #override \n\
    Ctrl <Key> minus: smaller-vt-font() \n\
    Ctrl <Key> plus: larger-vt-font() \n\
    Ctrl <Key> 0: set-vt-font(d) \n\
    Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
    Ctrl Shift <Key>V: insert-selection(CLIPBOARD) \n\
    Shift <Btn1Up>: exec-formatted("xdg-open '%t'", PRIMARY) \n\
    <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0) \n\
    <Btn2Up>: insert-selection(PRIMARY)
...
*background: #002b36
*foreground: #657b83
!!*fading: 40
*fadeColor: #002b36
*cursorColor: #93a1a1
*pointerColorBackground: #586e75
*pointerColorForeground: #93a1a1
...

我从 YouTube 上的视频中复制了这段文字,所以我不太明白它的含义。之后我将以下几行添加到 .xinitrc 中:

[[ -f ~/.Xresources ]] && xrdb -merge -I$HOME ~/.Xresources
exec i3

xterm 更改背景颜色(如 .Xresources 中指定),但字体不会更改且热键不起作用。我尝试使用 ctrl+rmouse 更改字体大小,但是当我选择任何选项时,没有任何变化。但是,当我使用启动 xterm 时

xterm-fn-终点-中-r-正常--16-----*-koi8-r

字体发生变化。我究竟做错了什么?

  • 我将 arch 与 xorg、xterm、i3wm 一起使用

答案1

在示例中,xterm 使用 TrueType 字体。 xterm 有一个(很少使用的)小部件方法,用于在运行时在 VT100 小部件中设置值,但这不包括 TrueType 字体。

VTSetValues在源代码中:

    if (xtermLoadFont(newvt,
              xtermFontName(TScreenOf(newvt)->MenuFontName(TScreenOf(curvt)->menu_font_number)),
              True, TScreenOf(newvt)->menu_font_number)) {
        /* resizing does the redisplay, so don't ask for it here */
        refresh_needed = True;
        fonts_redone = True;
    } else if (strcmp(NonNull(DefaultFontN(curvt)), NonNull(DefaultFontN(newvt)))) {
        TScreenOf(newvt)->MenuFontName(fontMenu_default) = DefaultFontN(curvt);
    }

如果这不适用于位图字体 (XLFD),那么

  • 错误报告到期,或者如果如图所示使用 TrueType 字体,则
  • 可以考虑功能请求。

(StackExchange 也不是讨论的合适场所)。

这个片段

XTerm*font:*-terminus-medium-r-normal-*-16-*-*-*-*-*-koi8-r 
XTerm*eightBitInput: false
XTerm*utf8: 1
XTerm*locale: 1

! Fonts ====================================================
! set font and fontsize
XTerm*faceName: DejaVu Sans Mono
XTerm*faceSize: 16

似乎是说您在“Fonts = =”之前添加了行。但是,那faceName资源覆盖font资源,如联机帮助页中所述:

如果不faceName指定了资源,或者两者都不匹配TrueType普通字体和粗体字体,xterm 使用XLFD (位图)字体及相关资源。

删除带有“faceName”的行将消除该冲突。

或者,您可以添加一行来设置renderFont资源,例如

*renderFont: false

相关内容