Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 04d35a5949
119 lines (82 sloc) 4.735 kb
Version 0.6 (2012-04-08)
* Add support for user-defined cdmrc:
Since cdm(1) is run with user priviledge, users can still circumvent
administrator's settings by simply running a modified version of cdm(1)
and use his own config. Therefore it's technically meaningless to specify
everything in a config file located in /etc/.
Multilevel config can be more flexible (see the implementation of submenus
after Casper's modifications), just like with bash(1), zsh(1), etc.
* Classify menu items into console programs and X programs:
Console programs are directly `exec'ed. X programs are run in a way
similar to that in cdm 0.5.3. Programs are specified in the bash array
`$binlist', and their names are in the array `$namelist'. Their types (
aka "flags"), as denoted by `C' (console programs) or `X' (X programs),
are specified in the array `$flaglist'.
So with the current architecture, cdm(1) submenus can be implemented by
letting one cdm(1) `exec' another cdm(1) with a different config file (see
the "user-defined cdmrc" section).
Also, one can log in his account and autostart cdm(1) (using `exec cdm' in
.profile or so), and let cdm(1) launch his desktop, or just drop to his
$SHELL by `exec $SHELL'. So the architecture is more flexible than cdm
0.5.3.
Right way to *auto*start cdm(1) -- use `exec cdm':
login(1) -/spawn/-> $SHELL -/exec/-> cdm(1) -/exec/-> console program
login(1) -/spawn/-> $SHELL -/exec/-> cdm(1) -> /exit/
| ^
/spawn/ /return/
v |
cdm-xlaunch(1)
|
/Launch and put to background/
v
X program
Wrong way to *auto*start cdm(1) -- just run (spawn) `cdm':
login(1) -/spawn/-> $SHELL /So the shell does not exit (note 1)/
| ^
/spawn/ /return/
v |
cdm(1) -/run console program or X program/
Note 1: Cannot configure $SHELL to exit conditionally on the exit of
cdm(1), because cdm might `exec' to arbitrary program as
specified by the user, of which the return values' meanings
could not be predicted.
It is also not advisable to let cdm(1) to wait for the running
program to exit (instead of `exec' the program or use the
method in cdm-xlaunch(1) to put the program to background),
since that just adds a (mostly) useless sleeping cdm(1) on the
process table when the program is running.
* Change `$menu' to a bash array:
This makes escaping and quoting in the menu possible and elegant for both
cdm(1) and cdmrc, which adds possibility for providing arguments to
programs in `$binlist' (formerly known as `$wmbinlist').
`$usexinit' and related code is removed accordingly.
* Use a better way to safely launch a program in the background:
See <http://linuxshellaccount.blogspot.com/2007/12/
what-to-do-when-nohup-hangs-up-anyway.html>.
`$loginshell' is removed accordingly.
* Remove `$allowconsole', `shutdownmenu()', etc.:
Since the related things can be set in config files as "console programs",
`$binlist' supports commands with whitespaces, and submenus can be
elegantly implemented with cdm `exec'ing another cdm with a different
config file.
* Code separation:
Code messing with X would only be run if an X program is to be run.
`xstart()' code is moved to `cdm-xlaunch(1)', since it's relatively
independent code and thus would be sometimes useful for running as a
standalone program.
* Replace self-made info formatting code with `functions.sh':
checkyesno() is removed too since gentoo's `functions.sh' already provides
it.
`functions.sh' can be substituted with custom ones of course.
* Use signal names (not numbers) in `trap'.
* Changes to variable names:
The changed are generally intended to make it easier to reason about the
actually effects of the variables.
`$theme' -> `$dialogrc': bacause the "theme" file is essentially a
dialogrc file. This is mainly affected by the Arch philosophy: "simplicity
as without unnecessary additions, modifications, or complications".
BTW, `$dialogrc' should now be set to an absolute path, making it possible
to make use of dialogrc's in the whole file system.
`$cosolekittime' -> `$cktimeout': indicate "timeout" here.
* Reformat comments:
Expanded tabs to avoid problem with editors.
Jump to Line
Something went wrong with that request. Please try again.