Text messed up with iso10646 pcf fonts
donmor opened this issue · 4 comments
Upfront Information
- Fvwm3 version: 1.0.4 (release)
- Linux distribution: Debian 11 (bullseye)
- Platform: Linux unknown (Actually wsl + VcXsrv)
Expected Behaviour
I'm testing Fvwm these days. I installed fonts-unifont
and xfonts-unifont
in my environment and set unifont ttf font as the default font of Fvwm, and it works fine. Then I changed DefaultFont xft:Unifont:Medium:size=12
to DefaultFont "-gnu-unifont-*"
and restarted Fvwm, expecting the unifont pcf font work as well.
Actual Behaviour
All characters on Fvwm parts messed up. For example, Restart
was rendered as 剥獴慲
. I also tried other pcf fonts that ends up with -iso10646-1
, and Fvwm renders characters as either texts that messed up or dozens of block (so-called tofu).
Logging
I found these repeatly in the log file:
convert_charsets: [fvwm][convert_charsets]: WARNING -
convert_charsets: Invalid byte sequence during conversion from UTF-8 to ISO-8859-1
Steps to Reproduce
- Install
xfonts-unifont
- Fetch Fvwm 1.0.4 and build & install
- Create a minimal config file and add
DefaultFont "-gnu-unifont-*"
into it. - Start Fvwm
This also happens with Fvwm2. Actually I'm testing with Fvwm2 from debian repository before, and later installed Fvwm3 from source to check if the problem still exists.
Here's the profile (comments removed to reduce size):
InfoStoreAdd terminal x-terminal-emulator
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Test (Init, f $[FVWM_USERDIR]/.BGdefault) \
Exec exec fvwm-root $[FVWM_USERDIR]/.BGdefault
+ I TestRc (NoMatch) Exec exec fvwm-root \
$[FVWM_DATADIR]/default-config/images/background/bg1.png
+ I Test (Init) Module FvwmBanner
+ I Module FvwmButtons RightPanel
+ I Module FvwmEvent EventNewDesk
DestroyFunc RaiseMoveX
AddToFunc RaiseMoveX
+ I Raise
+ M $0
+ D $1
DestroyFunc RaiseMove
AddToFunc RaiseMove
+ I Raise
+ M $0
DestroyFunc MoveToCurrent
AddToFunc MoveToCurrent
+ I ThisWindow MoveToPage
+ I ThisWindow MoveToDesk
DestroyFunc ViewManPage
AddToFunc ViewManPage
+ I Exec exec $[infostore.terminal] -g 80x40 \
-n "Manual Page - $0" -T "Manual Page - $0" -e man "$0"
DestroyFunc SetBG
AddToFunc SetBG
+ I Test (f $[FVWM_USERDIR]/images/background/$0) \
Exec exec fvwm-root $[FVWM_USERDIR]/images/background/$0
+ I TestRc (Match) Exec exec ln -fs images/background/$0 \
$[FVWM_USERDIR]/.BGdefault
+ I TestRc (Match) Break
+ I Test (!f $[FVWM_DATADIR]/default-config/images/background/$0) Break
+ I Exec exec fvwm-root $[FVWM_DATADIR]/default-config/images/background/$0
+ I Exec exec ln -fs $[FVWM_DATADIR]/default-config/images/background/$0 \
$[FVWM_USERDIR]/.BGdefault
DestroyFunc IconManClick
AddToFunc IconManClick
+ I ThisWindow (Raised, !Shaded, !Iconic, CurrentPage) Iconify
+ I TestRc (Match) Break
+ I ThisWindow WindowShade off
+ I ThisWindow Iconify off
+ I ThisWindow Raise
+ I ThisWindow (AcceptsFocus) FlipFocus
DestroyFunc ToggleTitle
AddToFunc ToggleTitle
+ I ThisWindow (State 1) WindowStyle Title
+ I TestRc (Match) State 1 False
+ I TestRc (Match) Break
+ I WindowStyle !Title
+ I State 1 True
DestroyFunc ChangeDesk
AddToFunc ChangeDesk
+ I SendToModule FvwmButtons ChangeButton desk0 Colorset 10
+ I SendToModule FvwmButtons ChangeButton desk1 Colorset 10
+ I SendToModule FvwmButtons ChangeButton desk2 Colorset 10
+ I SendToModule FvwmButtons ChangeButton desk3 Colorset 10
+ I SendToModule FvwmButtons ChangeButton desk$0 Colorset 11
DestroyFunc ToggleStaysOnTop
AddToFunc ToggleStaysOnTop
+ I Current (Layer 6) State 7 True
+ I Current (State 7, Layer 6) Layer 0 4
+ I Current (!State 7, !Layer 6) Layer 0 6
+ I State 7 False
DestroyFunc ToggleStaysOnBottom
AddToFunc ToggleStaysOnBottom
+ I Current (Layer 2) State 7 True
+ I Current (State 7, Layer 2) Layer 0 4
+ I Current (!State 7, !Layer 2) Layer 0 2
+ I State 7 False
DestroyFunc Unfocus
AddToFunc Unfocus
+ I Style * NeverFocus
+ I UpdateStyles
+ I Style * ClickToFocus
DesktopName 0 Main
DesktopName 1 Desk1
DesktopName 2 Desk2
DesktopName 3 Desk3
DesktopSize 2x2
EdgeScroll 100 100
EdgeResistance -1
EdgeThickness 0
Style * EdgeMoveDelay 50, EdgeMoveResistance 50
EwmhBaseStruts 0 120 0 0
ClickTime 250
MoveThreshold 3
Style * ClickToFocus
DefaultFont "-gnu-unifont-medium-r-normal-sans-16-160-75-75-c-80-iso10646-1"
Style * MinOverlapPlacement, GrabFocusOff, !UsePPosition
OpaqueMoveSize unlimited
Style * ResizeOpaque, SnapAttraction 15 SameType ScreenAll, SnapGrid
Style * DecorateTransient, StackTransientParent
Style * !FPGrabFocusTransient, FPReleaseFocusTransient
Style * WindowShadeScrolls, WindowShadeSteps 10
IgnoreModifiers L25
Style * BorderWidth 5, HandleWidth 5, MWMButtons, MWMBorder, FirmBorder
Style * Colorset 1, HilightColorset 2
Style * BorderColorset 3, HilightBorderColorset 4
Style * !Icon
Style RightPanel !Title, !Borders, !Handles, Sticky, \
WindowListSkip, NeverFocus
Style ConfirmQuit !Title, PositionPlacement Center, WindowListSkip, Layer 6
Style FvwmIdent WindowListSkip
Emulate Mwm
Colorset 0 fg Colorset 1 fg Colorset 2 fg Colorset 3 fg Colorset 4 fg Colorset 5 fg Colorset 6 fg Colorset 7 fg grey30, bg Colorset 8 fg Colorset 10 fg Colorset 11 fg Colorset 12 fg Colorset 13 fg Colorset 14 fg MenuStyle * Mwm
MenuStyle * MenuColorset 5
DestroyMenu MenuFvwmRoot
AddToMenu MenuFvwmRoot "Fvwm" Title
+ "&Programs%icons/programs.png%" Popup MenuPrograms
+ "XDG &Menu%icons/apps.png%" Popup XDGMenu
+ "&XTerm%icons/terminal.png%" Exec exec $[infostore.terminal]
+ "" Nop
+ "Fvwm&Console%icons/terminal.png%" Module FvwmConsole -terminal $[infostore.terminal]
+ "&Wallpapers%icons/wallpaper.png%" Popup BGMenu
+ "M&an Pages%icons/help.png%" Popup MenuFvwmManPages
+ "Copy Config%icons/conf.png%" FvwmScript FvwmScript-ConfirmCopyConfig
+ "" Nop
+ "Re&fresh%icons/refresh.png%" Refresh
+ "&Restart%icons/restart.png%" Restart
+ "&Quit%icons/quit.png%" Module FvwmScript FvwmScript-ConfirmQuit
PipeRead "fvwm-menu-desktop -e"
DestroyMenu MenuPrograms
AddToMenu MenuPrograms "Programs" Title
Test (x chromium) + "Chromium" Exec exec chromium
Test (x firefox) + "Firefox" Exec exec firefox
Test (x google-chrome) + "Google-Chrome" Exec exec google-chrome
Test (x gvim) + "gVim" Exec exec gvim
Test (x xemacs) + "XEmacs" Exec exec xemacs
Test (x gimp) + "Gimp" Exec exec gimp
Test (x vlc) + "VLC" Exec exec vlc
DestroyMenu BGMenu
AddToMenu BGMenu "Wallpapers" Title
+ "Floral%bgicons/bg1.png%" SetBG bg1.png
+ "Circles%bgicons/bg2.png%" SetBG bg2.png
+ "Space%bgicons/bg3.png%" SetBG bg3.png
DestroyMenu MenuWindowOps
AddToMenu MenuWindowOps
+ "Move" Move
+ "Resize" Resize
+ "Iconify" Iconify
+ "Maximize" Maximize
+ "Shade" WindowShade
+ "Stick" Stick
+ "" Nop
+ "Close" Close
+ "More..." Menu MenuWindowOpsLong This 0 0
DestroyMenu MenuWindowOpsLong
AddToMenu MenuWindowOpsLong
+ "Move" Move
+ "Resize" Resize
+ "(De)Iconify" Iconify
+ "(Un)Maximize" Maximize
+ "(Un)Shade" WindowShade
+ "(Un)Sticky" Stick
+ "(No)TitleBar" Pick (CirculateHit) ToggleTitle
+ "Send To" Popup MenuSendTo
+ "" Nop
+ "Close" Close
+ "Destroy" Destroy
+ "" Nop
+ "Raise" Raise
+ "Lower" Lower
+ "" Nop
+ "StaysOnTop" Pick (CirculateHit) Layer 0 6
+ "StaysPut" Pick (CirculateHit) Layer 0 4
+ "StaysOnBottom" Pick (CirculateHit) Layer 0 2
+ "" Nop
+ "Identify" Module FvwmIdent
DestroyMenu MenuIconOps
AddToMenu MenuIconOps
+ "(De)Iconify" Iconify
+ "(Un)Maximize" Maximize
+ "(Un)Shade" WindowShade
+ "(Un)Sticky" Stick
+ "(No)TitleBar" Pick (CirculateHit) ToggleTitle
+ "Send To" Popup MenuSendTo
+ "" Nop
+ "Close" Close
+ "Destroy" Destroy
+ "" Nop
+ "Raise" Raise
+ "Lower" Lower
+ "" Nop
+ "StaysOnTop" Pick (CirculateHit) Layer 0 6
+ "StaysPut" Pick (CirculateHit) Layer 0 4
+ "StaysOnBottom" Pick (CirculateHit) Layer 0 2
+ "" Nop
+ "Identify" Module FvwmIdent
DestroyMenu MenuSendTo
AddToMenu MenuSendTo
+ "Current" MoveToCurrent
+ "Page" PopUp MenuSendToPage
+ "Desk" PopUp MenuSendToDesk
DestroyMenu MenuSendToDesk
AddToMenu MenuSendToDesk
+ "Desk 0" MoveToDesk 0 0
+ "Desk 1" MoveToDesk 0 1
+ "Desk 2" MoveToDesk 0 2
+ "Desk 3" MoveToDesk 0 3
DestroyMenu MenuSendToPage
AddToMenu MenuSendToPage
+ "Page (0,0)" MoveToPage 0 0
+ "Page (0,1)" MoveToPage 0 1
+ "Page (1,0)" MoveToPage 1 0
+ "Page (1,1)" MoveToPage 1 1
DestroyMenu MenuFvwmManPages
AddToMenu MenuFvwmManPages "Help" Title
+ "fvwm" ViewManPage fvwm
+ "FvwmAnimate" ViewManPage FvwmAnimate
+ "FvwmAuto" ViewManPage FvwmAuto
+ "FvwmBacker" ViewManPage FvwmBacker
+ "FvwmBanner" ViewManPage FvwmBanner
+ "FvwmButtons" ViewManPage FvwmButtons
+ "FvwmCommand" ViewManPage FvwmCommand
+ "FvwmConsole" ViewManPage FvwmConsole
+ "FvwmEvent" ViewManPage FvwmEvent
+ "FvwmForm" ViewManPage FvwmForm
+ "FvwmIconMan" ViewManPage FvwmIconMan
+ "FvwmIdent" ViewManPage FvwmIdent
+ "FvwmPager" ViewManPage FvwmPager
+ "FvwmPerl" ViewManPage FvwmPerl
+ "FvwmProxy" ViewManPage FvwmProxy
+ "FvwmRearrange" ViewManPage FvwmRearrange
+ "FvwmScript" ViewManPage FvwmScript
+ "" Nop
+ "fvwm-root" ViewManPage fvwm-root
+ "fvwm-menu-desktop" ViewManPage fvwm-menu-desktop
+ "fvwm-menu-directory" ViewManPage fvwm-menu-directory
+ "fvwm-menu-headlines" ViewManPage fvwm-menu-headlines
+ "fvwm-menu-xlock" ViewManPage fvwm-menu-xlock
+ "fvwm-config" ViewManPage fvwm-config
Silent Key F1 A M Menu MenuFvwmRoot
Silent Key Menu A A Menu MenuFvwmRoot
Silent Key Tab A M WindowList Root c c NoDeskSort, SelectOnRelease Meta_L
Silent Key Space W M Menu MenuWindowOps Button1 0 100
Silent Key F1 A C GotoDesk 0 0
Silent Key F2 A C GotoDesk 0 1
Silent Key F3 A C GotoDesk 0 2
Silent Key F4 A C GotoDesk 0 3
Silent Key Super_R A A Exec exec $[infostore.terminal]
Mouse 1 1 A Menu MenuWindowOps Close
Mouse 3 1 A Delete
Mouse 3 1 C Destroy
Mouse 1 2 A Maximize 100 100
Mouse 1 4 A Iconify
Mouse 3 4 A WindowShade
Mouse 1 T A RaiseMoveX Move Maximize
Mouse 1 T C ToggleStaysOnTop
Mouse 1 T CS ToggleStaysOnBottom
Mouse 1 FS A RaiseMove Resize
Mouse 4 T A WindowShade True
Mouse 5 T A WindowShade False
Mouse 1 R A Unfocus
Mouse 2 R A WindowList
Mouse 3 R A Menu MenuFvwmRoot
Mouse 1 I A RaiseMoveX Move "Iconify off"
Mouse 3 T A Menu MenuWindowOps
Mouse 3 I A Menu MenuIconOps
15x15@3 -- Flat
85x15@3 15x15@3 -- Flat
20x20@3 -- Flat
80x20@3 20x20@3 -- Flat
53x47@3 47x47@3 -- Flat
47x47@3 -- Flat
30x50@4 50x50@3 50x70@3
30x70@3 50x30@4 50x50@3 70x50@3
ButtonStyle All - Clear
ButtonStyle 1 - MwmDecorMenu
ButtonStyle 2 - MwmDecorMax
ButtonStyle 4 - MwmDecorMin MwmDecorShade
DestroyModuleConfig FvwmIdent:*
*FvwmIdent: Colorset 10
*FvwmIdent: Font "xft:Sans:size=10:antialias=True"
DestroyModuleConfig FvwmBanner:*
*FvwmBanner: NoDecor
*FvwmBanner: Timeout 5
DestroyModuleConfig FvwmScript:*
*FvwmScript: DefaultColorset 10
DestroyModuleConfig RightPanel:*
*RightPanel: Geometry 120x$[vp.height]-0+0
*RightPanel: Colorset 14
*RightPanel: Rows $[vp.height]
*RightPanel: Columns 120
*RightPanel: Frame 0
*RightPanel: Font "xft:Sans:Bold:size=10:antialias=True"
*RightPanel: (120x45, Icon "fvwm-logo-small.png", Frame 0)
*RightPanel: (120x5, Frame 0)
*RightPanel: (10x20, Frame 0)
*RightPanel: (25x20, Id desk0, Title "0", Action (Mouse 1) GotoDesk 0 0, Colorset 11, ActiveColorset 12, Frame 0)
*RightPanel: (25x20, Id desk1, Title "1", Action (Mouse 1) GotoDesk 0 1, ActiveColorset 12, Frame 0)
*RightPanel: (25x20, Id desk2, Title "2", Action (Mouse 1) GotoDesk 0 2, ActiveColorset 12, Frame 0)
*RightPanel: (25x20, Id desk3, Title "3", Action (Mouse 1) GotoDesk 0 3, ActiveColorset 12, Frame 0)
*RightPanel: (10x20, Frame 0)
*RightPanel: (5x80, Frame 0)
*RightPanel: (110x80, Swallow FvwmPager 'Module FvwmPager *', Frame 0)
*RightPanel: (5x80, Frame 0)
*RightPanel: (120x5, Frame 0)
Test (x stalonetray) *RightPanel: (120x20, Swallow(NoClose,UseOld) \
stalonetray 'Exec exec stalonetray --config \
"$[FVWM_DATADIR]/default-config/.stalonetrayrc"', Frame 0)
Test (x stalonetray) PipeRead 'echo "*RightPanel: (120x$(($[vp.height]-225)), \
Top, Swallow FvwmIconMan \'Module FvwmIconMan\', Frame 0)"'
Test (!x stalonetray) PipeRead 'echo "*RightPanel: (120x$(($[vp.height]-205)),\
Top, Swallow FvwmIconMan \'Module FvwmIconMan\', Frame 0)"'
*RightPanel: (120x45, Swallow DateTime 'Module FvwmScript FvwmScript-DateTime',\
Frame 0)
*RightPanel: (120x5, Frame 0)
DestroyModuleConfig FvwmPager:*
*FvwmPager: Colorset * 14
*FvwmPager: HilightColorset * 13
*FvwmPager: BalloonColorset * 10
*FvwmPager: WindowColorsets 1 2
*FvwmPager: Font None
*FvwmPager: Balloons All
*FvwmPager: BalloonFont "xft:Sans:Bold:size=8:antialias=True"
*FvwmPager: BallonYOffset +2
*FvwmPager: Window3dBorders
*FvwmPager: MiniIcons
DestroyModuleConfig FvwmIconMan:*
*FvwmIconMan: UseWinList true
*FvwmIconMan: ButtonGeometry 120x20
*FvwmIconMan: ManagerGeometry 1x1
*FvwmIconMan: Background *FvwmIconMan: Foreground *FvwmIconMan: FocusColorset 11
*FvwmIconMan: IconColorset 14
*FvwmIconMan: FocusAndSelectColorset 12
*FvwmIconMan: SelectColorset 12
*FvwmIconMan: IconAndSelectColorset 12
*FvwmIconMan: DrawIcons always
*FvwmIconMan: ReliefThickness 0
*FvwmIconMan: Format "%t"
*FvwmIconMan: Font "xft:Sans:Bold:size=8:antialias=True"
*FvwmIconMan: Action Mouse 0 A ret
*FvwmIconMan: Action Mouse 1 A sendcommand IconManClick
*FvwmIconMan: Action Mouse 3 A sendcommand "Menu MenuIconOps"
*FvwmIconMan: Resolution global
*FvwmIconMan: Tips needed
*FvwmIconMan: Sort id
DestroyModuleConfig EventNewDesk:*
*EventNewDesk: PassID
*EventNewDesk: new_desk ChangeDesk
*FvwmFormDefault: Colorset 10
*FvwmFormDefault: ItemColorset 13
Does Fvwm3 crash?
No. It just render weird characters.
Extra Information
Restart
is 52,65,73,74,61,72,74
in bytes, and 剥獴慲
is u+5265, u+7374 and u+6172, tossing the last "t" away. And if the source string contains unicode characters, the corresponding parts of rendered bytes gets completely messed up and becomes unrecoverable.
Looks like Fvwm uses Unicode16BE to fetch characters from an iso10646 pcf font. But according to the log, it was trying to convert UTF-8 to ISO8859-1.
@donmor -- Are you setting BugOpts TransliterateUtf8 On
at all?
Setting BugOpts TransliterateUtf8 On doesn't work at all :(
Hi @donmor
Can you check the latest main
branch, to see if this is still an issue? There's been some font changes made there, and I wonder if this is fixed.