Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Text messed up with iso10646 pcf fonts #684

Open
donmor opened this issue Aug 19, 2022 · 4 comments
Open

Text messed up with iso10646 pcf fonts #684

donmor opened this issue Aug 19, 2022 · 4 comments
Labels
type:bug Something's broken!
Projects

Comments

@donmor
Copy link

donmor commented Aug 19, 2022

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.

@donmor donmor added the type:bug Something's broken! label Aug 19, 2022
@donmor
Copy link
Author

donmor commented Aug 19, 2022

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.

@ThomasAdam ThomasAdam added this to To do in FVWM3 via automation Aug 26, 2022
@ThomasAdam ThomasAdam added this to the 1.0.5 milestone Aug 26, 2022
@ThomasAdam
Copy link
Member

@donmor -- Are you setting BugOpts TransliterateUtf8 On at all?

@donmor
Copy link
Author

donmor commented Aug 31, 2022

Setting BugOpts TransliterateUtf8 On doesn't work at all :(

@ThomasAdam ThomasAdam removed this from the 1.0.5 milestone Sep 18, 2022
@ThomasAdam
Copy link
Member

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type:bug Something's broken!
Projects
Status: To do
FVWM3
  
To do
Development

No branches or pull requests

2 participants