petermad wrote: 2026-05-16, 12:53 UTCThat would require inserting that code in all the pages ...
I understand, but that task is also very trivial - The entire process from CHM to "converted" online docs is easily automated with a (very) short batch/script incl. automatic uploading to a website.
(but as I mentioned earlier elsewhere, the process should ideally be done the other way around: start with clean proper html, ready to generate (automatically) various output formats incl. online, chm, hlp, ...)
Out of curiosity, do you think this is still the best practice?
CHMDir works OK for unpacking. and the 32bit version also works fine for packing - I have been using it intensively these days, and for several years making the totalcmdDark.chm
It is correct that trying to pack with the 64bit version crashes TC - because of that I use this in [PackerPlugins] in wincmd.ini:
Using 468 prevents TC from trying to pack or delete files.
I have added a "button" in the bottom of toc.html to copy the url for the frameset with the currently displayed help file. that makes it easier to make a link to a page to hand over to others
it means that if the file currently displayed is for example: registration.htm then using this button will copy https://tcmd.madsenworld.dk/onlinehelp/?registration.htm to the Clipboard - ready to paste somewhere else - like in a topic here on the forum.
div { font-family:Arial,sans-serif;font-size:small; max-width: 50em }
This petermad's recommendation regarding the CSS fix makes actual sense, and there's also an option to automate following it, e.g., via a PowerShell script:
# optimize original ie.css style as proposed by petermad
''
'trying to optimize original CSS style if required...'
$original = 'div { font-family:Arial,sans-serif;font-size:x-small; }'
$modified = 'div { font-family:Arial,sans-serif;font-size:small;max-width:50em; }'
$style = 'ie.css'
foreach ($item in (Get-ChildItem -path $PSscriptRoot -file -recurse -force -filter $style)){
[IO.Path]::GetRelativePath($PSscriptRoot,$item)
'original style : {0}' -f $original
$text = [IO.File]::ReadAllText($item,[Text.Encoding]::UTF8)
if($text -match $original){
'modified style : {0}' -f $modified
$text = $text.Replace($original,$modified)
[IO.File]::WriteAllText($item,$text,[Text.Encoding]::UTF8)}
else{'no match has been found, nothing to do here...'}
''
} # end of for each item loop
This code can be used as a standalone script (to do so, save the code as code.ps1) or as a part of the decompiling script from the title message (to do so, copy-paste the code into the decompile_totalcmd_help.ps1 after the decompiling command section and before the finalizing section).
#278521 User License
Total Commander [always the latest version, including betas] x86/x64 on Win10 x64/Windows 11/Android 16
div { font-family:Arial,sans-serif;font-size:small; max-width: 50em }
I don't use the max-width anymore. Instead I restricted the width of the help iframe to 50em and made it adjustable with this css:
.help {width:50em; resize: horizontal}
(only works in cromium browsers)
beb wrote: 2026-05-18, 22:40 UTC
2petermad
Please consider adding an explicit return link to index2.html (Help files list) to get back to index.html in a single step.
Thank you.
Done - Since it is a long list I chose to put the back link in the top.
With Total Commander 11.57a RC1, a minor structural update to the help has happened:
The "Button bar configuration" (dlg_configbuttonbar.htm) entry has appeared in the "Configuration and switches" section of the Contents of the help (TOTALCMD.CHM) (with the corresponding update to the hsc6C4.hhc in the TOTALCMD.CHM).
This entry is already present in toc.html, so no action is required in this regard.
#278521 User License
Total Commander [always the latest version, including betas] x86/x64 on Win10 x64/Windows 11/Android 16
<meta name="viewport" content="width=device-width, initial-scale=1.0"> does not have any real positive influence when using frames you can test it here: https://tcmd.madsenworld.dk/onlinehelp/index1a.html
beb wrote: 2026-05-14, 11:41 UTC
N.B. It is also possible, and relatively easy, to fully automate the "TOTALCMD.CHM/hsc6C4.hhc" to "toc.html" conversion in case of the future structural updates (which are highly unlikely to be that radical anyway), but that goes out of my curiosity scope at the time.
It turned out to be not that 'relatively easy', but still doable.
The latest structural update to the CHM help, although minor, finally motivated me to make an automation script, and here we are.
Key datails:
Fully automated dynamic toc.html creation from the decompiled totalcmd.chm/*.hhc; it takes a fraction of a second to make toc.html with no manual after-party actions required
English and German help support
The HTML document <body></body> code in its entirety is automatically generated by the PowerShell script
The HTML document <header></header> code is plain text within the hereString $html variable of the PowerShell script and therefore can be easily modified/adapted by a user regarding user-specific/preffered HTML styles, javascripts, etc (in the <header></header>, only the document <title></title> is generated by the PowerShell depending on the help language)
No more static hard-coded elements like 'sections = ['Index','Intro','General','Operation','Menus','Config','Credits']'
User preferences:
$keep_toc_above_hhc = $true
defines the toc.html file destination path/location:
$true : make .html one level above .hhc, but not above the PowerShell script (default)
$false : make .html next to .hhc
$language_base_name = $true
defines the toc.html language-based naming usage:
$true : language code is added to the name, e.g., toc_ENG.html, toc_DEU.html (default)
$false : target name is toc.html
$overwrite_existing = $true
defines the toc.html file name collisions handling:
$true : new file overwrites existing one (default)
$false : new file will be renamed, e.g. toc_ENG1.html,toc_ENG2.html, etc
$specialized_index = $false
defines specialized help index usage:
$true : index is wrapped into a separate top-level help Contents entry (as it was up to this day)
$false : index is a standalone top-level help Contents entry, as in the original help (default)
Obviously, the PowerShell script should be placed anywhere next to or above the .hhc(s). hhc_to_toc_html_automation.ps1