Let the config parser continue parsing even after encountering an error;

original idea (with now-outdated patch) from Thomas Adam.  Since we now
report where errors exist, this now makes more sense.  Expand a bit on
config file parsing in the cwm(1).

Discussed with a few, including sthen; ok sthen.
This commit is contained in:
okan 2014-02-01 00:25:04 +00:00
parent 34477b8a35
commit 8b63ac62c2
2 changed files with 18 additions and 11 deletions

View File

@ -108,11 +108,8 @@ main(int argc, char **argv)
} }
conf_init(&Conf); conf_init(&Conf);
if (conf_path && (parse_config(conf_path, &Conf) == -1)) { if (conf_path && (parse_config(conf_path, &Conf) == -1))
warnx("config file %s has errors, not loading", conf_path); warnx("config file %s has errors", conf_path);
conf_clear(&Conf);
conf_init(&Conf);
}
free(conf_path); free(conf_path);
x_init(display_name); x_init(display_name);
@ -142,7 +139,6 @@ x_init(const char *dpyname)
HasRandr = XRRQueryExtension(X_Dpy, &Randr_ev, &i); HasRandr = XRRQueryExtension(X_Dpy, &Randr_ev, &i);
conf_atoms(); conf_atoms();
conf_cursor(&Conf); conf_cursor(&Conf);
for (i = 0; i < ScreenCount(X_Dpy); i++) for (i = 0; i < ScreenCount(X_Dpy); i++)
@ -162,6 +158,8 @@ x_teardown(void)
struct screen_ctx *sc; struct screen_ctx *sc;
unsigned int i; unsigned int i;
conf_clear(&Conf);
TAILQ_FOREACH(sc, &Screenq, entry) { TAILQ_FOREACH(sc, &Screenq, entry) {
for (i = 0; i < CWM_COLOR_NITEMS; i++) for (i = 0; i < CWM_COLOR_NITEMS; i++)
XftColorFree(X_Dpy, sc->visual, sc->colormap, XftColorFree(X_Dpy, sc->visual, sc->colormap,

19
cwm.1
View File

@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: October 31 2012 $ .Dd $Mdocdate: December 16 2013 $
.Dt CWM 1 .Dt CWM 1
.Os .Os
.Sh NAME .Sh NAME
@ -52,7 +52,7 @@ Right mouse button.
.Nm .Nm
is very simple in its use. is very simple in its use.
Most of the actions are initiated via key bindings. Most of the actions are initiated via key bindings.
The current key bindings are described below; The default key bindings are described below;
their functionality is described in more detail later. their functionality is described in more detail later.
.Pp .Pp
.Bl -tag -width "CM-EscapeXXXXX" -offset indent -compact .Bl -tag -width "CM-EscapeXXXXX" -offset indent -compact
@ -125,7 +125,7 @@ Quit
.Nm . .Nm .
.El .El
.Pp .Pp
The mouse bindings are also important, they are: The default mouse bindings are:
.Pp .Pp
.Bl -tag -width Ds -offset indent -compact .Bl -tag -width Ds -offset indent -compact
.It Ic M-M1 .It Ic M-M1
@ -145,8 +145,17 @@ The options for
are as follows: are as follows:
.Bl -tag -width Ds .Bl -tag -width Ds
.It Fl c Ar file .It Fl c Ar file
Specify the config file to use. Defaults to Specify an alternative configuration file.
.Pa ~/.cwmrc . By default,
.Nm
loads
.Pa ~/.cwmrc ,
if present.
Any error messages from lines in the configuration file will be sent to
.Em stderr ;
however,
.Nm
will continue to process the rest of the configuration file.
.It Fl d Ar display .It Fl d Ar display
Specify the display to use. Specify the display to use.
.El .El