On Sat, Oct 07, 2017 at 10:13:35PM -0400 I heard the voice of
Steve Litt, and lo! it spake thus:
>
> I mentioned I was writing documentation about ctwm for
> Troubleshooters.Com. I finished the docs, and they're at
> http://troubleshooters.com/linux/ctwm
Some notes in going through:
- overview.htm
- "ctwm docs distributed with ctwm". The doc/devman/ bits are the
_developer's_ manual, so a prospective user shouldn't even be
looking at them. That's why they're not even hooked into the main
build at all, and no great effort has been made to make them Just
Work in arbitrary environments; people doing dev are presumed
already willing to do a little tweaking if necessary(*) :). I
don't see any reason to even mention the dev manual in the sort of
docs you're writing here.
(*) Note that asciidoctor is often dist'd as a Ruby Gem; in a
look through the Void package list I don't see [m]any gems
obviously listed, so maybe it's more common in that world to
just use gem's native packaging to install them?
The doc/manual/ bits are the user's manual, in pretty much manpage
style. It's still (for the moment) explicitly intended to remain
compatible with the defunct python asciidoc implementation, but
any built tarballs (like releases) will already include the
processed man/HTML outputs of it anyway. And the HTML version of
it from the latest release(*) is kept up on the website as well.
(*) Actually, I've left the 4.0.0 manual up, since the 4.0.1 has
no changes at in either the manual or anything in describes,
so I skipped the churn.
- "Restarting ctwm". If you're talking about emergency restarting,
might want to mention SIGHUP. Dup to modernize.htm talking about
restarting.
- "Running ctwm in a Virtual Machine" and "Running a dedicated ctwm
window". I'd give strong mention to using xnest or xephyr here;
xephyr even gives you mouse/keyboard capturing like a VM so you
can bypass bindings in your outside WM. At least xnest does have
some occasional slightly odd behavior due to what it is, but none
of it gets in the way of testing configs. And it's a lot lower
overhead (both in terms of system resources, and user mental ones)
than using a VM.
The nested/window-mode ctwm with -w is still high up on my mental
chopping block; it's a really weird thing that doesn't actually
work all that well in a lot of ways, has fingers mucking up a lot
of different parts of the code, and has been involved in some
weird bugs in the past even when you're not using it. I would
definitely recommend not even mentioning its existence; xnest is
better in every practical and most impractical ways.
(dup comments to part of modernize.htm talking about a VM)
- "About Icons". I'd probably move this into a place talking about
the icon manager. In ctwm (and twm before it, for that matter)
I've always just used the icon manager and IconifyByUnmapping, so
icons never show up at all. Other people do differ.
- install.htm
- "Download either ctwm-4.0.1.tar.xz or ctwm-4.0.1.tar.xz." You
probably wanted one of those to be .gz. I'd consider skipping
talking about .gz depending on your audience, since it's just
there for what are now pretty old systems that lack xz.
- "Testing ctwm" (and the cp'ing of system.ctwmrc earlier); trust
me, nobody running ctwm uses or thinks too highly of the
system.ctwmrc :). Note that it's also baked into the binary, so
if you don't have a .ctwmrc (or .twmrc, as a fallback), it'll get
used anyway, so you may not have to bother cp'ing it around.
- modernize.htm
- (various comments handled in talking about config)
- f.fullscreenzoom mentions using F11 to "come back", but that isn't
something ctwm would do unless you added a key binding for it
(which I don't see in your config). Some _programs_ (like
Firefox) use F11 to toggle their own full-screen mode, which ctwm
implements (via an EWMH message) as f.fullscreenzoom, so it
happens to work for them, but it won't in general. x-ref config
stuff below.
- "Accommodating Workspaces"
- "There are two ways to navigate workspaces: Brute force menus,
and the super-magic workspace thingy, which looks like 8
chicklets in 2 rows of 4 columns each. This section uses a
little of each."
Actually, there's at least one more; keybindings, which you then
talk about and have in your sample config, and are probably
widely used anyway.
Also, the size and layout of the WSM is pretty depending on how
you config it; e.g., mine (when it's shown, which is extremely
rarely) is currently a 3x3 grid, and in your sample config,
you've got it 8-wide in 1 row.
- For me, I'd skip dealing with icons for the WSM as well, and
leave it with no title; just have key bindings for
f.toggleworkspacemgr to pop it up/down when needed. I use
Alt-F12 for that (and have the ridiculous "Print Screen" button,
which is right beside F12 on my keyboard, remapped to an extra
alt key as well, which makes it thoroughly convenient. And to
hit the Alt-F11 mapping for pulling up the Occupy window when I
want to adjust things around. I'll bet some keystroke handling
in that window would be in order, for popping it down if nothing
else...).
- menu_behavior.htm
- The "Slide left" behavior for the mouse is wrong. Sliding left by
itself never does anything, no matter what entry you're on.
Sliding _out_ of the current menu and _into_ the parent menu
collapses away the current, but of course you can do that by going
up as well as left.
- "How can you tell? It's simple: The selected entry has a little
left-arrow superimposed on top of it." It's also reverse
video'd.
- patch.htm
- vim-style menu navigation is an interesting idea. I'll bet there
are ways that could be cleanly(*) made an option.
(*) Well, not significantly less clean than anything else around
that part of the codebase, anyway...
- Re: the patch, I'd generally suggest something more like
- if(!strcmp(keynam, "Return")) {
+ if(0 && !strcmp(keynam, "Return")) {
instead of messing with the string being compared; it's more
explicit about the intention to the reader, as well as making it
completely removable by the compiler. Or using the preprocessor
to remove it, but that takes TWO lines instead of one, so it's
obviously only half as good.
- stevelitt_ctwmrc.htm (and -1.0.ctwmrc)
- I've academic interest in how MaxWindowSize is helping you. I had
it in my config for years, but I eventually took it out, because I
pretty much never saw it helping anything, and even once in a
great while (~yearly, if perhaps less) it got in my way.
- BorderWidth and ThreeDBorderWidth. If you're
UseThreeDBorders'ing, BorderWidth is meaningless.
- The various bits you have "Help kbd instantiated windows get
focus" commented probably need a little more precise explanation.
UsePPosition especially doesn't have anything to do with focus,
but with positioning, and ditto RandomPlacement. Possibly you
mean how that just plop the window somewhere rather than waiting
for the user to position? Of course, if you have RandomPlacement
on, UsePPosition wouldn't be needed for that anyway, and
RandomPlacement "on" is the default in 4.0.0+ as well.
Now, I don't see any obvious reason it would be difficult or
ambiguous to add an AutoFocusToNewWindows or the like... there
are certainly the various (IMO unpleasant) side effects, but
that's not the WM's fault.
- You may want to rethink whether to set NoDefaults; as long as
you're making some adjustments to the icons on the titlebar
anyway, you may want to just take over from scratch. That's pure
personal style though.
- (x-ref earlier discussion of WorkSpaceManager and icons vs.
f.toggle keybindings)
- (x-ref earlier about f.fullscreenzoom and F11) I note that you do
have Button8 bound to it, so you could reverse out of it that way;
may want to update earlier discussion or config so they match.
But I see you've also got the same button in titlebar context
bound to f.delete; that sounds like a dangerous mix for
user-training reasons.
- You've got a f.movetitlebar binding, but without SqueezeTitle set
that won't do anything. May be worth leaving in as an example,
but probably deserves a comment to that effect.
- On the menus:
- There's probably no reason you need xcalc/xman/xmag on there :)
- menu "workspace-special" looks like a fossil from
experimentation; probably not needed in a dist'd config.
- I'd definitely lose the f.adoptwindow binding, along with the
other nested stuff above. f.start/stop animation aren't really
window specific (you may want to access them from that menu for
convenience reasons, but they're WM-wide toggles, and I've never
used 'em myself). Similarly f.refresh; if you're really wanting
single-window refresh I'd just use f.winrefresh.
--
Matthew Fuller (MF4839) | [email protected]
Systems/Network Administrator | http://www.over-yonder.net/~fullermd/
On the Internet, nobody can hear you scream.