Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 2951 | Differences between
and this patch

Collapse All | Expand All

(-)fvwm-2.4.7.orig/config.h.in (+3 lines)
Lines 2-7 Link Here
2
/* Suffix for config filenames */
2
/* Suffix for config filenames */
3
#define FVWMRC ".fvwm2rc"
3
#define FVWMRC ".fvwm2rc"
4
4
5
/* Define for fancy, multi-pixmap-themeable titlebars */
6
#define FANCY_TITLEBARS
7
5
/* Define if gdk-imlib is used */
8
/* Define if gdk-imlib is used */
6
#undef GDK_IMLIB
9
#undef GDK_IMLIB
7
10
(-)fvwm-2.4.7.orig/fvwm/borders.c (-8 / +205 lines)
Lines 271-280 Link Here
271
  case MiniIconButton:
271
  case MiniIconButton:
272
  case PixmapButton:
272
  case PixmapButton:
273
  case TiledPixmapButton:
273
  case TiledPixmapButton:
274
#ifdef FANCY_TITLEBARS
275
  case MultiPixmap:       /* in case of UseTitleStyle */
276
#endif
274
    if (type == PixmapButton || type == TiledPixmapButton)
277
    if (type == PixmapButton || type == TiledPixmapButton)
275
    {
278
    {
276
      p = df->u.p;
279
      p = df->u.p;
277
    }
280
    }
281
#ifdef FANCY_TITLEBARS
282
    else if (type == MultiPixmap) {
283
      if (left1right0 && df->u.multi_pixmaps[TBP_LEFT_BUTTONS])
284
        p = df->u.multi_pixmaps[TBP_LEFT_BUTTONS];
285
      else if (!left1right0 && df->u.multi_pixmaps[TBP_RIGHT_BUTTONS])
286
        p = df->u.multi_pixmaps[TBP_RIGHT_BUTTONS];
287
      else if (df->u.multi_pixmaps[TBP_BUTTONS])
288
        p = df->u.multi_pixmaps[TBP_BUTTONS];
289
      else if (left1right0 && df->u.multi_pixmaps[TBP_LEFT_MAIN])
290
        p = df->u.multi_pixmaps[TBP_LEFT_MAIN];
291
      else if (!left1right0 && df->u.multi_pixmaps[TBP_RIGHT_MAIN])
292
        p = df->u.multi_pixmaps[TBP_RIGHT_MAIN];
293
      else
294
        p = df->u.multi_pixmaps[TBP_MAIN];
295
    }
296
#endif
278
    else
297
    else
279
    {
298
    {
280
      if (!t->mini_icon)
299
      if (!t->mini_icon)
Lines 298-303 Link Here
298
    if (is_lowest && !p->mask && pbutton_background_pixmap)
317
    if (is_lowest && !p->mask && pbutton_background_pixmap)
299
    {
318
    {
300
      if (type == TiledPixmapButton ||
319
      if (type == TiledPixmapButton ||
320
#ifdef FANCY_TITLEBARS
321
          type == MultiPixmap ||
322
#endif
301
	  (p && p->width >= width && p->height >= height))
323
	  (p && p->width >= width && p->height >= height))
302
      {
324
      {
303
	/* better performance: set a background pixmap if possible, i.e. if the
325
	/* better performance: set a background pixmap if possible, i.e. if the
Lines 326-332 Link Here
326
	XClearWindow(dpy, win);
348
	XClearWindow(dpy, win);
327
      }
349
      }
328
    }
350
    }
329
    if (type != TiledPixmapButton)
351
    if (type != TiledPixmapButton
352
#ifdef FANCY_TITLEBARS
353
        && type != MultiPixmap
354
#endif
355
       )
330
    {
356
    {
331
      if (DFS_H_JUSTIFICATION(df->style) == JUST_RIGHT)
357
      if (DFS_H_JUSTIFICATION(df->style) == JUST_RIGHT)
332
	x += (int)(width - p->width);
358
	x += (int)(width - p->width);
Lines 354-360 Link Here
354
380
355
    XSetClipMask(dpy, Scr.TransMaskGC, p->mask);
381
    XSetClipMask(dpy, Scr.TransMaskGC, p->mask);
356
    XSetClipOrigin(dpy, Scr.TransMaskGC, x, y);
382
    XSetClipOrigin(dpy, Scr.TransMaskGC, x, y);
357
    if (type != TiledPixmapButton)
383
    if (type != TiledPixmapButton
384
#ifdef FANCY_TITLEBARS
385
        && type != MultiPixmap
386
#endif
387
       )
358
    {
388
    {
359
      int cx = x;
389
      int cx = x;
360
      int cy = y;
390
      int cy = y;
Lines 448-453 Link Here
448
  return;
478
  return;
449
}
479
}
450
480
481
#ifdef FANCY_TITLEBARS
482
483
/****************************************************************************
484
 *
485
 *  Tile or stretch src into dest, starting at the given location and
486
 *  continuing for the given width and height. This is a utility function used
487
 *  by DrawMultiPixmapTitlebar. (tril@igs.net)
488
 *
489
 ****************************************************************************/
490
static void RenderIntoWindow(GC gc, Picture *src, Window dest, int x_start,
491
                             int y_start, int width, int height, Bool stretch)
492
{
493
  Pixmap pm;
494
  if (stretch)
495
    pm = CreateStretchPixmap(dpy, src->picture, src->width, src->height,
496
                             src->depth, width, height, gc);
497
  else
498
    pm = CreateTiledPixmap(dpy, src->picture, src->width, src->height,
499
                           width, height, src->depth, gc);
500
  XCopyArea(dpy, pm, dest, gc, 0, 0, width, height, x_start, y_start);
501
  XFreePixmap(dpy, pm);
502
}
503
504
/****************************************************************************
505
 *
506
 *  Redraws multi-pixmap titlebar (tril@igs.net)
507
 *
508
 ****************************************************************************/
509
static void DrawMultiPixmapTitlebar(FvwmWindow *window, DecorFace *df)
510
{
511
  Window       title_win;
512
  GC           gc;
513
  const char  *title;
514
  Picture    **pm;
515
  short        stretch_flags;
516
  int          title_width, title_height, text_width, text_offset, text_y_pos;
517
  int          left_space, right_space, under_offset, under_width;
518
519
  pm = df->u.multi_pixmaps;
520
  stretch_flags = df->u.multi_stretch_flags;
521
  gc = Scr.TitleGC;
522
  XSetClipMask(dpy, gc, None);
523
  title_win = window->title_w;
524
  title = window->name;
525
  title_width = window->title_g.width;
526
  title_height = window->title_g.height;
527
528
  if (pm[TBP_MAIN])
529
    RenderIntoWindow(gc, pm[TBP_MAIN], title_win, 0, 0, title_width,
530
                     title_height, (stretch_flags & (1 << TBP_MAIN)));
531
  else if (!title)
532
    RenderIntoWindow(gc, pm[TBP_LEFT_MAIN], title_win, 0, 0, title_width,
533
                     title_height, (stretch_flags & (1 << TBP_LEFT_MAIN)));
534
535
  if (title) {
536
#ifdef I18N_MB
537
    text_width = XmbTextEscapement(window->title_font.fontset, title,
538
                                   strlen(title));
539
#else
540
    text_width = XTextWidth(window->title_font.font, title, strlen(title));
541
#endif
542
    if (text_width > title_width)
543
      text_width = title_width;
544
    switch (TB_JUSTIFICATION(GetDecor(window, titlebar))) {
545
    case JUST_LEFT:
546
      text_offset = TITLE_PADDING;
547
      if (pm[TBP_LEFT_OF_TEXT])
548
        text_offset += pm[TBP_LEFT_OF_TEXT]->width;
549
      if (pm[TBP_LEFT_END])
550
        text_offset += pm[TBP_LEFT_END]->width;
551
      if (text_offset > title_width - text_width)
552
        text_offset = title_width - text_width;
553
      break;
554
    case JUST_RIGHT:
555
      text_offset = title_width - text_width - TITLE_PADDING;
556
      if (pm[TBP_RIGHT_OF_TEXT])
557
        text_offset -= pm[TBP_RIGHT_OF_TEXT]->width;
558
      if (pm[TBP_RIGHT_END])
559
        text_offset -= pm[TBP_RIGHT_END]->width;
560
      if (text_offset < 0)
561
        text_offset = 0;
562
      break;
563
    default:
564
      text_offset = (title_width - text_width) / 2;
565
      break;
566
    }
567
    under_offset = text_offset;
568
    under_width = text_width;
569
    /* If there's title padding, put it *inside* the undertext area: */
570
    if (under_offset >= TITLE_PADDING) {
571
      under_offset -= TITLE_PADDING;
572
      under_width += TITLE_PADDING;
573
    }
574
    if (under_offset + under_width + TITLE_PADDING <= title_width)
575
      under_width += TITLE_PADDING;
576
    left_space = under_offset;
577
    right_space = title_width - left_space - under_width;
578
579
    if (pm[TBP_LEFT_MAIN] && left_space > 0)
580
      RenderIntoWindow(gc, pm[TBP_LEFT_MAIN], title_win, 0, 0, left_space,
581
                       title_height, (stretch_flags & (1 << TBP_LEFT_MAIN)));
582
    if (pm[TBP_RIGHT_MAIN] && right_space > 0)
583
      RenderIntoWindow(gc, pm[TBP_RIGHT_MAIN], title_win,
584
                       under_offset + under_width, 0, right_space,
585
                       title_height, (stretch_flags & (1 << TBP_RIGHT_MAIN)));
586
    if (pm[TBP_UNDER_TEXT] && under_width > 0)
587
      RenderIntoWindow(gc, pm[TBP_UNDER_TEXT], title_win, under_offset, 0,
588
                       under_width, title_height,
589
                       (stretch_flags & (1 << TBP_UNDER_TEXT)));
590
    if (pm[TBP_LEFT_OF_TEXT] &&
591
        pm[TBP_LEFT_OF_TEXT]->width <= left_space) {
592
      XCopyArea(dpy, pm[TBP_LEFT_OF_TEXT]->picture, title_win, gc, 0, 0,
593
                pm[TBP_LEFT_OF_TEXT]->width, title_height,
594
                under_offset - pm[TBP_LEFT_OF_TEXT]->width, 0);
595
      left_space -= pm[TBP_LEFT_OF_TEXT]->width;
596
    }
597
    if (pm[TBP_RIGHT_OF_TEXT] &&
598
        pm[TBP_RIGHT_OF_TEXT]->width <= right_space) {
599
      XCopyArea(dpy, pm[TBP_RIGHT_OF_TEXT]->picture, title_win, gc, 0, 0,
600
                pm[TBP_RIGHT_OF_TEXT]->width, title_height,
601
                under_offset + under_width, 0);
602
      right_space -= pm[TBP_RIGHT_OF_TEXT]->width;
603
    }
604
605
    text_y_pos = title_height
606
                 - (title_height - window->title_font.font->ascent) / 2
607
                 - 1;
608
    if (title_height > 19)
609
      text_y_pos--;
610
    if (text_y_pos < 0)
611
      text_y_pos = 0;
612
#ifdef I18N_MB
613
    XmbDrawString(dpy, title_win, window->title_font.fontset, gc, text_offset,
614
                  gc, text_offset, text_y_pos, title, strlen(title));
615
#else
616
    XDrawString(dpy, title_win, gc, text_offset, text_y_pos, title,
617
                strlen(title));
618
#endif
619
  }
620
  else
621
    left_space = right_space = title_width;
622
623
  if (pm[TBP_LEFT_END] && pm[TBP_LEFT_END]->width <= left_space)
624
    XCopyArea(dpy, pm[TBP_LEFT_END]->picture, title_win, gc, 0, 0,
625
              pm[TBP_LEFT_END]->width, title_height, 0, 0);
626
  if (pm[TBP_RIGHT_END] && pm[TBP_RIGHT_END]->width <= right_space)
627
    XCopyArea(dpy, pm[TBP_RIGHT_END]->picture, title_win, gc, 0, 0,
628
              pm[TBP_RIGHT_END]->width, title_height,
629
              title_width - pm[TBP_RIGHT_END]->width, 0);
630
}
631
632
#endif /* FANCY_TITLEBARS */
633
451
/* rules to get button state */
634
/* rules to get button state */
452
static enum ButtonState get_button_state(
635
static enum ButtonState get_button_state(
453
  Bool has_focus, Bool toggled, Window w)
636
  Bool has_focus, Bool toggled, Window w)
Lines 1029-1034 Link Here
1029
  Window expose_win, XRectangle *rclip)
1212
  Window expose_win, XRectangle *rclip)
1030
{
1213
{
1031
  int i;
1214
  int i;
1215
  int left1right0;
1032
  Bool is_lowest = True;
1216
  Bool is_lowest = True;
1033
  Pixmap *pass_bg_pixmap;
1217
  Pixmap *pass_bg_pixmap;
1034
1218
Lines 1042-1049 Link Here
1042
1226
1043
  for (i = 0; i < NUMBER_OF_BUTTONS; i++)
1227
  for (i = 0; i < NUMBER_OF_BUTTONS; i++)
1044
  {
1228
  {
1045
    if (t->button_w[i] != None && (((i & 1) && i / 2 < Scr.nr_right_buttons) ||
1229
    left1right0 = !(i&1);
1046
				   (!(i & 1) && i / 2 < Scr.nr_left_buttons)))
1230
    if (t->button_w[i] != None &&
1231
        ((!left1right0 && i/2 < Scr.nr_right_buttons) ||
1232
         (left1right0  && i/2 < Scr.nr_left_buttons)))
1047
    {
1233
    {
1048
      mwm_flags stateflags =
1234
      mwm_flags stateflags =
1049
	TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i]));
1235
	TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i]));
Lines 1097-1104 Link Here
1097
	    DrawButton(t, t->button_w[i], t->title_g.height, t->title_g.height,
1283
	    DrawButton(t, t->button_w[i], t->title_g.height, t->title_g.height,
1098
		       tsdf, cd->relief_gc, cd->shadow_gc,
1284
		       tsdf, cd->relief_gc, cd->shadow_gc,
1099
		       cd->fore_color, cd->back_color, is_lowest,
1285
		       cd->fore_color, cd->back_color, is_lowest,
1100
		       TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i])), 1, NULL,
1286
		       TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i])),
1101
		       pass_bg_pixmap);
1287
                       left1right0, NULL, pass_bg_pixmap);
1102
	    is_lowest = False;
1288
	    is_lowest = False;
1103
	  }
1289
	  }
1104
	}
1290
	}
Lines 1110-1117 Link Here
1110
	  DrawButton(t, t->button_w[i], t->title_g.height, t->title_g.height,
1296
	  DrawButton(t, t->button_w[i], t->title_g.height, t->title_g.height,
1111
		     df, cd->relief_gc, cd->shadow_gc,
1297
		     df, cd->relief_gc, cd->shadow_gc,
1112
		     cd->fore_color, cd->back_color, is_lowest,
1298
		     cd->fore_color, cd->back_color, is_lowest,
1113
		     TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i])), 1, NULL,
1299
		     TB_MWM_DECOR_FLAGS(GetDecor(t, buttons[i])), left1right0,
1114
		     pass_bg_pixmap);
1300
                     NULL, pass_bg_pixmap);
1115
	  is_lowest = False;
1301
	  is_lowest = False;
1116
	}
1302
	}
1117
1303
Lines 1276-1281 Link Here
1276
    /* draw compound titlebar (veliaa@rpi.edu) */
1462
    /* draw compound titlebar (veliaa@rpi.edu) */
1277
    Bool is_lowest = True;
1463
    Bool is_lowest = True;
1278
1464
1465
#ifdef FANCY_TITLEBARS
1466
    if (df->style.face_type == MultiPixmap)
1467
      DrawMultiPixmapTitlebar(t, df);
1468
    else
1469
#endif
1279
    if (PressedW == t->title_w)
1470
    if (PressedW == t->title_w)
1280
    {
1471
    {
1281
#ifdef MULTISTYLE
1472
#ifdef MULTISTYLE
Lines 1319-1324 Link Here
1319
      break;
1510
      break;
1320
    }
1511
    }
1321
1512
1513
#ifdef FANCY_TITLEBARS
1514
    if (TB_STATE(GetDecor(t, titlebar))[title_state].style.face_type
1515
        != MultiPixmap)
1516
#endif
1517
    {
1322
#ifdef I18N_MB
1518
#ifdef I18N_MB
1323
    if(t->name != (char *)NULL)
1519
    if(t->name != (char *)NULL)
1324
      XmbDrawString(dpy, t->title_w, t->title_font.fontset,
1520
      XmbDrawString(dpy, t->title_w, t->title_font.fontset,
Lines 1329-1334 Link Here
1329
      XDrawString(dpy, t->title_w, Scr.TitleGC, hor_off,
1525
      XDrawString(dpy, t->title_w, Scr.TitleGC, hor_off,
1330
		  t->title_font.y + 1, t->name, strlen(t->name));
1526
		  t->title_font.y + 1, t->name, strlen(t->name));
1331
#endif
1527
#endif
1528
    }
1332
  }
1529
  }
1333
1530
1334
  /*
1531
  /*
(-)fvwm-2.4.7.orig/fvwm/builtins.c (+104 lines)
Lines 63-68 Link Here
63
63
64
static char *ReadTitleButton(
64
static char *ReadTitleButton(
65
    char *s, TitleButton *tb, Boolean append, int button);
65
    char *s, TitleButton *tb, Boolean append, int button);
66
#ifdef FANCY_TITLEBARS
67
static char *ReadMultiPixmapDecor(char *s, DecorFace *df);
68
#endif
66
static void DestroyFvwmDecor(FvwmDecor *decor);
69
static void DestroyFvwmDecor(FvwmDecor *decor);
67
70
68
extern float rgpctMovementDefault[32];
71
extern float rgpctMovementDefault[32];
Lines 1401-1406 Link Here
1401
1404
1402
void FreeDecorFace(Display *dpy, DecorFace *df)
1405
void FreeDecorFace(Display *dpy, DecorFace *df)
1403
{
1406
{
1407
#ifdef FANCY_TITLEBARS
1408
  int i;
1409
#endif
1410
1404
  switch (DFS_FACE_TYPE(df->style))
1411
  switch (DFS_FACE_TYPE(df->style))
1405
  {
1412
  {
1406
  case GradientButton:
1413
  case GradientButton:
Lines 1418-1423 Link Here
1418
      DestroyPicture(dpy, df->u.p);
1425
      DestroyPicture(dpy, df->u.p);
1419
    break;
1426
    break;
1420
1427
1428
#ifdef FANCY_TITLEBARS
1429
  case MultiPixmap:
1430
    if (df->u.multi_pixmaps) {
1431
      for (i=0; i < NUM_TB_PIXMAPS; i++) {
1432
        if (df->u.multi_pixmaps[i])
1433
          DestroyPicture(dpy, df->u.multi_pixmaps[i]);
1434
      }
1435
      free(df->u.multi_pixmaps);
1436
    }
1437
    break;
1438
#endif
1439
1421
  case VectorButton:
1440
  case VectorButton:
1422
  case DefaultVectorButton:
1441
  case DefaultVectorButton:
1423
    if (df->u.vector.x)
1442
    if (df->u.vector.x)
Lines 1649-1654 Link Here
1649
      else
1668
      else
1650
	DFS_FACE_TYPE(df->style) = PixmapButton;
1669
	DFS_FACE_TYPE(df->style) = PixmapButton;
1651
    }
1670
    }
1671
#ifdef FANCY_TITLEBARS
1672
    else if (strncasecmp(style,"MultiPixmap",11)==0) {
1673
      if (button != -1) {
1674
        if (verbose)
1675
          fvwm_msg(ERR, "ReadDecorFace",
1676
                   "MultiPixmap is only valid for TitleStyle");
1677
        return False;
1678
      }
1679
      s = ReadMultiPixmapDecor(s, df);
1680
      if (!s)
1681
        return False;
1682
    }
1683
#endif
1652
#ifdef MINI_ICONS
1684
#ifdef MINI_ICONS
1653
    else if (strncasecmp (style, "MiniIcon", 8) == 0)
1685
    else if (strncasecmp (style, "MiniIcon", 8) == 0)
1654
    {
1686
    {
Lines 1956-1961 Link Here
1956
  return end;
1988
  return end;
1957
}
1989
}
1958
1990
1991
#ifdef FANCY_TITLEBARS
1992
/*****************************************************************************
1993
 *
1994
 * Reads a multi-pixmap titlebar config. (tril@igs.net)
1995
 *
1996
 ****************************************************************************/
1997
static char *ReadMultiPixmapDecor(char *s, DecorFace *df)
1998
{
1999
  static char *pm_names[NUM_TB_PIXMAPS+1] = {
2000
    "Main",
2001
    "LeftMain",
2002
    "RightMain",
2003
    "UnderText",
2004
    "LeftOfText",
2005
    "RightOfText",
2006
    "LeftEnd",
2007
    "RightEnd",
2008
    "Buttons",
2009
    "LeftButtons",
2010
    "RightButtons",
2011
    NULL
2012
  };
2013
  Picture **pm;
2014
  char *token;
2015
  Bool stretched;
2016
  int pm_id, i;
2017
2018
  df->style.face_type = MultiPixmap;
2019
  df->u.multi_pixmaps = pm =
2020
    (Picture**)safecalloc(NUM_TB_PIXMAPS, sizeof(Picture*));
2021
2022
  s = GetNextTokenIndex(s, pm_names, 0, &pm_id);
2023
  while (pm_id >= 0) {
2024
    s = DoPeekToken(s, &token, ",()", NULL, NULL);
2025
    stretched = False;
2026
    if (StrEquals(token, "stretched")) {
2027
      stretched = True;
2028
      s = DoPeekToken(s, &token, ",", NULL, NULL);
2029
    }
2030
    else if (StrEquals(token, "tiled"))
2031
      s = DoPeekToken(s, &token, ",", NULL, NULL);
2032
    if (!token)
2033
      break;
2034
    if (pm[pm_id]) {
2035
      fvwm_msg(WARN, "ReadMultiPixmapDecor",
2036
               "Ignoring already-specified %s pixmap", pm_names[i]);
2037
      continue;
2038
    }
2039
    if (stretched)
2040
      df->u.multi_stretch_flags |= (1 << pm_id);
2041
    pm[pm_id] = CachePicture(dpy, Scr.NoFocusWin, NULL, token, Scr.ColorLimit);
2042
    if (!pm[pm_id])
2043
      fvwm_msg(ERR, "ReadMultiPixmapDecor", "Pixmap '%s' could not be loaded",
2044
               token);
2045
    s = GetNextTokenIndex(s, pm_names, 0, &pm_id);
2046
  }
2047
2048
  if (!pm[TBP_MAIN] && !(pm[TBP_LEFT_MAIN] && pm[TBP_RIGHT_MAIN])) {
2049
    fvwm_msg(ERR, "ReadMultiPixmapDecor",
2050
             "No Main pixmap found for TitleStyle MultiPixmap "
2051
             "(you must specify either Main, or both LeftMain and RightMain)");
2052
    for (i=0; i < NUM_TB_PIXMAPS; i++) {
2053
      if (pm[i])
2054
        DestroyPicture(dpy, pm[i]);
2055
    }
2056
    free(pm);
2057
    return NULL;
2058
  }
2059
2060
  return s;
2061
}
2062
#endif /* FANCY_TITLEBARS */
1959
2063
1960
#ifdef USEDECOR
2064
#ifdef USEDECOR
1961
/*****************************************************************************
2065
/*****************************************************************************
(-)fvwm-2.4.7.orig/fvwm/fvwm2.1 (+39 lines)
Lines 6306-6312 Link Here
6306
ButtonStyle All ActiveUp (-- flat) Inactive \\
6306
ButtonStyle All ActiveUp (-- flat) Inactive \\
6307
  (-- flat)
6307
  (-- flat)
6308
.EE
6308
.EE
6309
If fvwm is compiled with the FANCY_TITLEBARS option enabled, an additional
6310
TitleStyle is available: MultiPixmap. This allows you to specify different
6311
pixmaps for different parts of the titlebar. Some of them are tiled or
6312
stretched to fit a particular space; others are discrete "transition" pixmaps
6313
which are not resized in any way. The definable pixmaps are:
6314
.EX
6315
- Main (tiled/stretched): The main titlebar pixmap
6316
- LeftMain (tiled/stretched): Left of title text
6317
- RightMain (tiled/stretched): Right of title text
6318
- UnderText (tiled/stretched): Underneath title text
6319
- LeftOfText: Pixmap just to the left of the title text
6320
- RightOfText: Pixmap just to the right of the title text
6321
- LeftEnd: Pixmap at the far left end of the titlebar
6322
  (just before buttons)
6323
- RightEnd: Pixmap at the far right end of the titlebar
6324
  (just before buttons)
6325
- Buttons (tiled): Tiled under buttons in case of
6326
  UseTitleStyle
6327
- LeftButtons (tiled): Tiled under left buttons in case of
6328
  UseTitleStyle
6329
- RightButtons (tiled): Tiled under right buttons in case of
6330
  UseTitleStyle
6331
.EE
6332
None of these are mandatory except for Main (or, if you don't define Main,
6333
you must define both LeftMain and RightMain). If no "Buttons" pixmaps are
6334
defined and UseTitleStyle is specified for one or more buttons, Main,
6335
LeftMain, or RightMain will be used as appropriate.
6309
6336
6337
The syntax for this style type is:
6338
.EX
6339
MultiPixmap <section> (<flag>) <pixmap filename>, ...
6340
.EE
6341
continuing for whatever pixmaps you want to define. By default, all
6342
non-transition pixmaps are tiled. If you want one stretched instead (this is
6343
allowed for Main, LeftMain, RightMain, and UnderText), add "(stretched)" after
6344
the section name:
6345
.EX
6346
MultiPixmap Main (stretched) foo.xpm, UnderText bar.xpm
6347
.EE
6348
Otherwise you can omit (<flag>), as shown with UnderText.
6310
.TP
6349
.TP
6311
.BI "UpdateDecor [" decor "]"
6350
.BI "UpdateDecor [" decor "]"
6312
This command is kept mainly for backwards compatibility.  Since
6351
This command is kept mainly for backwards compatibility.  Since
(-)fvwm-2.4.7.orig/fvwm/fvwm2.1.orig (+7757 lines)
Line 0 Link Here
1
.\" Formatting instructions for the fvwm man page:
2
.\"
3
.\"  - Do not use \f... formatting instructions
4
.\"    unless you have to, see below.
5
.\"  - Avoid single and double quotes wherever possible.
6
.\"
7
.\" For further details, please refer to the Linux Man-Page how-to.
8
.\"
9
.\"  context                                typeface       example
10
.\"  ---------------------------------- --------------  -----------------
11
.\"  filenames:                         italics (.I)    .I .fvwm2rc
12
.\"  command line options of fvwm2 cmd: bold (.B)       .B \-cmd
13
.\"  arguments of command line options: italics (.I)    .BI \-cmd command
14
.\"  built in commands:                 bold (.B)       .B Move
15
.\"  references to built in commands:   bold (.B)       .RB See Move
16
.\"  references to man page sections:   bold (.B)       .RB See SYNOPSIS
17
.\"  references to style options:       italics (.I)    .RI See Lenience
18
.\"  built in command options:          italics (.I)    .BI "Move " "0 0"
19
.\"  command syntax:                    bold/ita. (.BI) .BI "Move [" "x y" "]"
20
.\"  environment variables:             italics (.I)    .I $DISPLAY
21
.\"  key names:                         small (.SM)     .SM Tab
22
.\"  style names and strings:           double quotes   "stylename", "x"
23
.\"  single characters:                 single quotes   '@'
24
.\"  module names:                      bold (.B)       .B FvwmTheme
25
.\"  links to web pages:                bold (.B)       .B http://fvwm.org
26
.\"  acronyms:                          small (.SM)     .SM ICCCM
27
.\"
28
.\"
29
.\" The name fvwm is written in lower case throughout this man
30
.\" page.
31
.\"
32
.\" Note that the word "will" is rarely correct in a man page or
33
.\" any document. Describe what fvwm does, not what it will do,
34
.\" even if you haven't written the feature yet. dje 2/3/01
35
.\" (3/Feb/2001).
36
.\"
37
.\" A note to everyone who needs to write dates.  Don't use 2/3/01
38
.\" notation, a non-american person simply can't parse such
39
.\" sequence of digits.  Please use 3-Feb-2001 or 2001-02-03 forms.
40
.\" migo 16/May/2001.
41
.\"
42
.\" A note about the rule against \f... formatting.  On Solaris,
43
.\" AIX, and HPUX the ".BI" type commands are limited to 6
44
.\" arguments. use \f... formatting in that case.  See the lines
45
.\" formatted with ".IP".
46
.\"  dje 15/June/2001.
47
.\"
48
.\" @(#)fvwm-2.4.7 11 Apr 2002
49
.de EX		\"Begin example
50
.ne 5
51
.if n .sp 1
52
.if t .sp .5
53
.nf
54
.in +.5i
55
..
56
.de EE
57
.fi
58
.in -.5i
59
.if n .sp 1
60
.if t .sp .5
61
..
62
.ta .3i .6i .9i 1.2i 1.5i 1.8i
63
.TH FVWM2 1 "11 Apr 2002"
64
.UC
65
.SH NAME
66
67
fvwm2 \- F(?) Virtual Window Manager (version 2) for X11
68
.SH SYNOPSIS
69
70
.B fvwm2
71
.RB [ \-blackout ]
72
.RB [ \-clientId
73
.IR       id ]
74
.RB [ \-cmd
75
.IR       config_command ]
76
.RB [ \-d
77
.IR       displayname ]
78
.RB [ \-debug ]
79
.RB [ \-debug_stack_ring ]
80
.RB [ \-f
81
.IR       config_file ]
82
.RB [ \-h ]
83
.RB [ \-replace ]
84
.RB [ \-restore
85
.IR       state_file ]
86
.RB [ \-s ]
87
.RB [ \-version ]
88
.RB [ \-visual
89
.IR       visual_class ]
90
.RB [ \-visualId
91
.IR       id ]
92
93
.SH DESCRIPTION
94
95
Fvwm is a window manager for X11.  It is designed to minimize
96
memory consumption, provide a 3D look to window frames, and a
97
virtual desktop.
98
99
Note that there are several window managers around that have
100
"fvwm" in their name.  In the past, version 2.x of fvwm was
101
commonly called fvwm2 to distinguish it from the former version
102
1.x (fvwm or even fvwm1).  Since version 1.x has been replaced by
103
version 2.x a long time ago we simply call version 2.x and all
104
versions to come, fvwm, throughout this document, although the
105
executable program is named fvwm2.  There is an fvwm offspring
106
called fvwm95. Although it is very similar to older versions of
107
fvwm version 2 it is technically a different window manager that
108
has been developed by different people.  The main goal of fvwm95
109
was to supply a Windows 95 like look and feel.  Since then fvwm
110
has been greatly enhanced and only very few features of fvwm95 can
111
not be imitated by fvwm.  No active development has been going on
112
for fvwm95 for several years now.  Unfortunately Red Hat (a
113
popular Linux distributor) has a pre-configured fvwm package based
114
on fvwm version 2.x that is called fvwm95 too.
115
116
Fvwm provides both a large
117
.I virtual desktop
118
and
119
.I multiple disjoint desktops
120
which can be used separately or together.  The virtual desktop
121
allows you to pretend that your video screen is really quite
122
large, and you can scroll around within the desktop.  The multiple
123
disjoint desktops allow you to pretend that you really have
124
several screens to work at, but each screen is completely
125
unrelated to the others.
126
127
Fvwm provides
128
.I keyboard accelerators
129
which allow you to perform most window-manager functions,
130
including moving and resizing windows, and operating the menus,
131
using keyboard shortcuts.
132
133
Fvwm has also blurred the distinction between configuration
134
commands and built-in commands that most window-managers make.
135
Configuration commands typically set fonts, colors, menu contents,
136
key and mouse function bindings, while built-in commands typically
137
do things like raise and lower windows.  Fvwm makes no such
138
distinction, and allows, to the extent that is practical, anything
139
to be changed at any time.
140
141
Other noteworthy differences between Fvwm and other X11 window
142
managers are the introduction of the
143
.I SloppyFocus " and " NeverFocus
144
focus methods.  Focus policy can be specified for individual
145
windows.  Windows using
146
.I SloppyFocus
147
acquire focus when the pointer moves into them and retain focus
148
until some other window acquires it.  Such windows do not lose
149
focus when the pointer moves into the root window.  The
150
.I NeverFocus
151
policy is provided for use with windows into which one never types
152
(e.g. xclock, oclock, xbiff, xeyes, tuxeyes) - for example, if a
153
SloppyFocus terminal window has focus, moving the cursor over a
154
.I NeverFocus
155
decoration window won't deprive the terminal of focus.
156
157
.SH OPTIONS
158
159
These are the command line options that are recognized by fvwm:
160
.TP
161
.BI "-blackout"
162
This option is provided for backward compatibility only.  Blacking
163
out the screen during startup is not necessary anymore.
164
.TP
165
.BI "-clientId " id
166
This option is used when fvwm is started by a session
167
manager. Should not be used by a user.
168
169
.TP
170
.BI "-cmd " config_command
171
Causes fvwm to use
172
.I config_command
173
instead of
174
.RB "'Read"
175
.IR ".fvwm2rc'"
176
as its initialization command.  (Note that up to 10
177
.BR \-f " and " \-cmd
178
parameters can be given, and they are executed in the order
179
specified.)
180
.TP
181
.BI "-d " displayname
182
Manage the display called
183
.I displayname
184
instead of the name obtained from the environment variable
185
.IR "$DISPLAY" .
186
.TP
187
.BI "-debug"
188
Puts X transactions in synchronous mode, which dramatically slows
189
things down, but guarantees that fvwm's internal error messages
190
are correct. Also causes fvwm to output debug messages while
191
running.
192
.TP
193
.BI "-debug_stack_ring"
194
Enables stack ring debugging.  This option is only intended for
195
internal debugging and should only be used by developers.
196
.TP
197
.BI "-f " config_file
198
Causes fvwm to read
199
.I config_file
200
instead of
201
.I .fvwm2rc
202
as its initialization file.  This is equivalent to
203
.RB "-cmd 'Read"
204
.IR "config_file'."
205
.
206
.TP
207
.BI "-h"
208
A short usage description is printed.
209
.TP
210
.BI "-replace"
211
Try to take over from a previously running wm.  This does not work
212
unless the other wm is
213
.SM ICCCM
214
2.0 compliant.
215
.TP
216
.BI "-restore " state_file
217
This option is used when fvwm is started by a session manager.
218
Should not be used by a user.
219
.TP
220
.BI "-s"
221
On a multi-screen display, run fvwm only on the screen named in
222
the
223
.I $DISPLAY
224
environment variable or provided through the
225
.B -d
226
option. Normally, fvwm attempts to start up on all screens of a
227
multi-screen display.
228
.TP
229
.BI "-version"
230
Prints the version of fvwm to
231
.IR stderr .
232
Also prints an information about the compiled in support for
233
readline, rplay, stroke, xpm, gnome hints, session management and
234
multibyte characters.
235
.TP
236
.BI "-visual " visual_class
237
Causes fvwm to use
238
.I visual_class
239
for the window borders and menus.
240
.I visual_class
241
can be "StaticGray", "GrayScale", "StaticColor", "PseudoColor",
242
"TrueColor" or "DirectColor".
243
.TP
244
.BI "-visualId " id
245
Causes fvwm to use
246
.I id
247
as the visualId for the window borders and menus.
248
.I id
249
can be specified as N for decimal or 0xN for hexadecimal. See man
250
page of xdpyinfo for a list of supported visuals.
251
252
253
.SH ANATOMY OF A WINDOW
254
255
Fvwm puts a decorative border around most windows.  This border
256
consists of a bar on each side and a small L-shaped section on
257
each corner.  There is an additional top bar called the title-bar
258
which is used to display the name of the window.  In addition,
259
there are up to 10 title-bar buttons.  The top, side, and bottom
260
bars are collectively known as the side-bars.  The corner pieces
261
are called the frame.
262
263
Unless the standard defaults files are modified, pressing mouse
264
button 1 in the title or side-bars begins a move operation on the
265
window.  Pressing button 1 in the corner frame pieces begins a
266
resize operation.  Pressing button 2 anywhere in the border brings
267
up an extensive list of window operations.
268
269
Up to ten title-bar buttons may exist.  Their use is completely
270
user definable.  The default configuration has a title-bar button
271
on each side of the title-bar.  The one on the left is used to
272
bring up a list of window options, regardless of which mouse
273
button is used.  The one on the right is used to iconify the
274
window.  The number of title-bar buttons used depends on which
275
ones have mouse actions bound to them.  See the section on the
276
.B Mouse
277
command below.
278
279
280
.SH THE VIRTUAL DESKTOP
281
282
Fvwm provides multiple virtual desktops for users who wish to use
283
them.  The screen is a viewport onto a
284
.I desktop
285
which may be larger than the screen.  Several distinct desktops
286
can be accessed (concept: one desktop for each project, or one
287
desktop for each application, when view applications are
288
distinct).  Since each desktop can be larger than the physical
289
screen, divided into m by n
290
.I pages
291
which are each the size of the physical screen, windows which are
292
larger than the screen or large groups of related windows can
293
easily be viewed.
294
295
The (m by n) size (i.e. number of pages) of the virtual desktops
296
can be changed any time, by using the
297
.B DeskTopSize
298
built-in command.  All virtual desktops must be (are) the same
299
size.  The total number of distinct desktops does not need to be
300
specified, but is limited to approximately 4 billion total. All
301
windows on a range of desktops can be viewed in the
302
.BR FvwmPager ,
303
a miniature view of the desktops.  The pager is an accessory
304
program, called a module, which is not essential for the window
305
manager to operate.  Windows may also be listed, along with their
306
geometries, in a window list, accessible as a pop-up menu, or as a
307
separate window, called the
308
.B FvwmWinList
309
(another module).
310
311
Fvwm keeps the windows on the desktop in a layered stacking order;
312
a window in a lower layer never obscures a window in a higher
313
layer. The layer of a window can be changed by using the
314
.B Layer
315
command.  The concept of layers is a generalization of the
316
.I StaysOnTop
317
flag of older fvwm versions. The
318
.IR StaysOnTop " and " StaysPut
319
.B Style
320
options are now implemented by putting the windows in suitable
321
layers and the previously missing
322
.IB "StaysOnBottom " Style
323
option has been added.
324
325
.B Sticky
326
windows are windows which transcend the virtual desktop by
327
"Sticking to the screen's glass".  They always stay put on the
328
screen. This is convenient for things like clocks and xbiff's, so
329
you only need to run one such gadget and it always stays with you.
330
Icons can also be made to stick to the glass, if desired.
331
332
Window geometries are specified relative to the current viewport.
333
That is:
334
.EX
335
xterm -geometry +0+0
336
.EE
337
creates a window in the upper-left hand corner of the visible
338
portion of the screen.  It is permissible to specify geometries
339
which place windows on the virtual desktop, but off the screen.
340
For example, if the visible screen is 1000 by 1000 pixels, and the
341
desktop size is 3x3, and the current viewport is at the upper left
342
hand corner of the desktop, invoking:
343
.EX
344
xterm -geometry +1000+1000
345
.EE
346
places a window just off of the lower right hand corner of the
347
screen.  It can be found by moving the mouse to the lower right
348
hand corner of the screen and waiting for it to scroll into view.
349
A geometry specified as something like:
350
.EX
351
xterm -geometry -5-5
352
.EE
353
places the window's lower right hand corner 5 pixels from the
354
lower right corner of the visible portion of the screen.  Not all
355
applications support window geometries with negative offsets.
356
Some applications place the window's upper right hand corner 5
357
pixels above and to the left of the upper left hand corner of the
358
screen; others may do just plain bizarre things.
359
360
There are several ways to cause a window to map onto a desktop or
361
page other than the currently active one. The geometry technique
362
mentioned above (specifying x,y coordinates larger than the
363
physical screen size), however, suffers from the limitation of
364
being interpreted relative to the current viewport: the window may
365
not consistently appear on a specific page, unless you always
366
invoke the application from the same page.
367
368
A better way to place windows on a different page, screen or desk
369
from the currently mapped viewport is to use the
370
.IR StartsOnPage or StartsOnScreen
371
style specification (the successors to the older
372
.I StartsOnDesk
373
style) in the
374
.I .fvwm2rc
375
configuration file.  The placement is consistent: it does not
376
depend on your current location on the virtual desktop.
377
378
Some applications that understand standard Xt command line
379
arguments and X resources, like xterm and xfontsel, allow the user
380
to specify the start-up desk or page on the command line:
381
.EX
382
xterm -xrm "*Desk:1"
383
.EE
384
starts an xterm on desk number 1;
385
.EX
386
xterm -xrm "*Page:3 2 1"
387
.EE
388
starts an xterm two pages to the right and one down from the upper
389
left hand page of desk number 3.  Not all applications understand
390
the use of these options, however.  You could achieve the same
391
results with the following lines in your
392
.I .Xdefaults
393
file:
394
.EX
395
XTerm*Desk: 1
396
.EE
397
or
398
.EX
399
XTerm*Page: 3 2 1
400
.EE
401
402
403
.SH USE ON MULTI-SCREEN DISPLAYS
404
405
If the
406
.B -s
407
command line argument is not given, fvwm automatically starts up
408
on every screen on the specified display.  After fvwm starts each
409
screen is treated independently.  Restarts of fvwm need to be
410
performed separately on each screen.  The use of
411
.EX
412
 EdgeScroll 0 0
413
.EE
414
is strongly recommended for multi-screen displays.  You may need
415
to quit on each screen to quit from the X session completely.
416
This is not to be confused with Xinerama support.
417
418
419
.SH XINERAMA SUPPORT
420
421
Fvwm supports the Xinerama extension of newer X servers which
422
is similar to multi head support (multiple screens) but allows to
423
move windows between screens.  If Xinerama support has been
424
compiled into fvwm, it is used whenever fvwm runs on an X server
425
that supports and uses multiple screens via Xinerama.  Without
426
this option, the whole desktop is treated as one big screen.  For
427
example, menus might pop up right between two screens.  The
428
.BI EdgeResistance
429
command allows to specify an explicit resistance value for moving
430
windows over the screen edge between two Xinerama screens.
431
Xinerama support can be enabled or disabled on the fly or from the
432
configuration file with the
433
.B Xinerama
434
command.  Many modules and commands work nicely with Xinerama
435
displays.
436
437
Everywhere where a geometry in the usual X format can be supplied,
438
fvwm's Xinerama extension allows to specify a screen in addition
439
to the geometry (or even the screen alone).  To do this, a '@' is
440
added to the end of the geometry string followed by either the
441
screen number or a letter.  A number is taken as the number of the
442
Xinerama screen to be used (as configured in the X server).  The
443
letter can be one of 'g' for the global screen (the rectangle that
444
encloses all Xinerama screens), 'p' for the primary screen (see
445
below), 'c' for the current screen (the one that currently
446
contains the pointer).  If the X server does not support Xinerama
447
or only one screen is used, the screen bit is ignored.
448
449
.EX
450
Style * IconBox 64x300-0-0@p
451
.EE
452
453
Xinerama support can be configured to use a primary screen.  Fwvm
454
can be configured to place new windows and icons on this screen.
455
The primary screen is screen 0 by default but can be changed with
456
the
457
.B XineramaPrimaryScreen
458
command.
459
460
Xinerama support was designed to work out of the box with the same
461
configurations file that would work on a single screen.  It may
462
not work too well if the involved screens use different screen
463
resolutions.  In this situation, windows may get stuck in the
464
portion of the whole desktop that belongs to neither screen.  If
465
this happens, the windows or icons can be retrieved with the
466
command
467
468
.EX
469
All MoveToScreen
470
.EE
471
472
that can be entered in an FvwmConsole window or with FvwmCommand.
473
474
For multi-screen implementations other than Xinerama, such as
475
Single Logical Screen, it is possible to simulate a Xinerama
476
configuration if the total screen seen by FVWM is made up of
477
equal sized monitors in a rectangular grid.  The commands
478
.BR XineramaSls " and " XineramaSlsSize
479
are used to configure this feature.
480
481
482
.SH INITIALIZATION
483
484
During initialization, fvwm searches for a configuration file
485
which describes key and button bindings, and many other
486
things. The format of these files is described later.  Fvwm first
487
searches for configuration files using the command
488
.EX
489
.BI "Read " .fvwm2rc
490
.EE
491
This looks for
492
.IR .fvwm2rc " in "
493
.IR "$HOME/.fvwm" " or " "$FVWM_USERDIR"
494
directories, as described in
495
.B Read
496
below.  If this fails, fvwm also searches for this file in the
497
.I $HOME
498
directory or for
499
.I system.fvwm2rc
500
file in the system place.  If a configuration file is not found,
501
any mouse button or the
502
.SM Help
503
or
504
.SM F1
505
keys on the root window brings up menus and forms that can create
506
a starting configuration file.
507
508
Fvwm sets two environment variables which are inherited by its
509
children.  These are
510
.I $DISPLAY
511
which describes the display on which fvwm is running.
512
.I $DISPLAY
513
may be
514
.I unix:0.0
515
or
516
.IR ":0.0" ,
517
which doesn't work too well when passed through rsh to another
518
machine, so
519
.I $HOSTDISPLAY
520
is set to a network-ready description of the display.
521
.I $HOSTDISPLAY
522
always uses the TCP/IP transport protocol (even for a local
523
connection) so
524
.I $DISPLAY
525
should be used for local connections, as it may use Unix-domain
526
sockets, which are faster.
527
528
If you want to start some applications or modules with fvwm, you
529
can simply put
530
.EX
531
Exec app
532
.EE
533
or
534
.EX
535
Module FvwmXxx
536
.EE
537
into your
538
.IR .fvwm2rc ,
539
but it is not recommended; do this only if you know what you are
540
doing. It is usually critical to start applications or modules
541
after
542
.I .fvwm2rc
543
is read, because it contains styles or module configurations which
544
can affect window appearance and functionality.
545
546
The standard way to start applications or modules on fvwm's start
547
up is to add them to an initialization function (usually
548
.BR StartFunction " or " InitFunction ).
549
This way they are only started after fvwm reads the entire
550
.IR .fvwm2rc .
551
552
Fvwm has three special functions for initialization:
553
.BR StartFunction ,
554
which is executed on startups and restarts;
555
.BR InitFunction " and " RestartFunction ,
556
which are executed during initialization and restarts
557
(respectively) just after StartFunction. These functions may be
558
customized in a user's
559
.I .fvwm2rc
560
file via the
561
.B AddToFunc
562
command (described later) to start up modules, xterms, or whatever
563
you'd like to have started by fvwm.
564
565
Fvwm has also a special exit function:
566
. BR ExitFunction ,
567
executed when exiting or restarting before actually quitting.
568
It could be used to explicitly kill modules, etc.
569
570
If fvwm is run under a session manager, functions
571
.BR SessionInitFunction " and " SessionRestartFunction
572
are executed instead of InitFunction and RestartFunction.
573
This helps to define the user's
574
.I .fvwm2rc
575
file to be good for both running under a session manager and
576
without it.  Generally it is a bad idea to start xterms or other
577
applications in "Session*" functions.  Also someone can decide to
578
start different modules while running under a session manager or
579
not.  For the similar purposes
580
. B SessionExitFunction
581
is used instead of ExitFunction.
582
.EX
583
DestroyFunc StartFunction
584
AddToFunc StartFunction
585
 + I ModuleSynchronous FvwmTheme
586
 + I Module FvwmPager * *
587
 + I Module FvwmButtons
588
589
DestroyFunc InitFunction
590
AddToFunc InitFunction
591
 + I Module FvwmBanner
592
 + I Module FvwmTaskBar
593
 + I xsetroot -solid cyan
594
 + I Exec xterm
595
 + I Exec netscape
596
597
DestroyFunc RestartFunction
598
AddToFunc RestartFunction
599
 + I Module FvwmTaskBar
600
601
DestroyFunc SessionInitFunction
602
AddToFunc SessionInitFunction
603
 + I Module FvwmBanner
604
605
DestroyFunc SessionRestartFunction
606
AddToFunc SessionRestartFunction
607
 + I Nop
608
.EE
609
You don't need to define all special functions if some are empty.
610
611
.SH COMPILATION OPTIONS
612
613
Fvwm has a number of compile-time options.  If you have trouble
614
using a certain command or feature, check to see if support for it
615
was included at compile time.  Optional features are described in
616
the
617
.I config.h
618
file that is generated during compilation.
619
620
.SH ICONS
621
622
The basic fvwm configuration uses monochrome bitmap icons.  If
623
.B XPM
624
extensions are compiled in, then color icons can be used. In order
625
to use these options you need the XPM package, as described in the
626
.I INSTALL.fvwm
627
file.
628
629
If both the
630
.BR SHAPE " and " XPM
631
options are compiled in you get shaped color icons, which are very
632
spiffy.
633
634
.SH MODULES
635
636
A module is a separate program which runs as a separate Unix
637
process but transmits commands to fvwm to execute.  Users can
638
write their own modules to do any weird or bizarre manipulations
639
without bloating or affecting the integrity of fvwm itself.
640
641
Modules must be spawned by fvwm so that it can set up two pipes
642
for fvwm and the module to communicate with.  The pipes are
643
already open for the module when it starts and the file
644
descriptors for the pipes are provided as command line arguments.
645
646
Modules can be spawned during fvwm at any time during the X
647
session by use of the
648
.B Module
649
built-in command.  Modules can exist for the duration of the X
650
session, or can perform a single task and exit.  If the module is
651
still active when fvwm is told to quit, then fvwm closes the
652
communication pipes and waits to receive a SIGCHLD from the
653
module, indicating that it has detected the pipe closure and has
654
exited.  If modules fail to detect the pipe closure fvwm exits
655
after approximately 30 seconds anyway.  The number of
656
simultaneously executing modules is limited by the operating
657
system's maximum number of simultaneously open files, usually
658
between 60 and 256.
659
660
Modules simply transmit text commands to the fvwm built-in command
661
engine.  Text commands are formatted just as in the case of a
662
mouse binding in the
663
.I .fvwm2rc
664
setup file.  Certain auxiliary information is also transmitted, as
665
in the sample module
666
.BR FvwmButtons .
667
The
668
.B FvwmButtons
669
module is documented in its own man page.
670
671
Please refer to the
672
.B "MODULE COMMANDS"
673
section for details.
674
675
.SH ICCCM COMPLIANCE
676
677
Fvwm attempts to be
678
.SM ICCCM
679
2.0 compliant.  In addition,
680
.SM ICCCM
681
states that it should be possible for applications to receive any
682
keystroke, which is not consistent with the keyboard shortcut
683
approach used in fvwm and most other window managers.  In
684
particular you cannot have the same keyboard shortcuts working
685
with your fvwm and another fvwm running within Xnest (a nested X
686
server running in a window).  The same problem exists with mouse
687
bindings.
688
689
The
690
.SM ICCCM
691
states that windows possessing the property
692
.EX
693
WM_HINTS(WM_HINTS):
694
    Client accepts input or input focus: False
695
.EE
696
should not be given the keyboard input focus by the window
697
manager. These windows can take the input focus by themselves,
698
however.  A number of applications set this property, and yet
699
expect the window-manager to give them the keyboard focus anyway,
700
so fvwm provides a window-style,
701
.IR Lenience ", "
702
which allows fvwm to overlook this
703
.SM ICCCM
704
rule.  Even with this window-style it is not guaranteed that the
705
application accepts focus.
706
707
The differences between
708
.SM ICCCM
709
1.1 and 2.0 include the ability to take over from a running
710
.SM ICCCM
711
2.0 compliant window manager; thus
712
.EX
713
fvwm2; vi .fvwm2rc; fvwm2 -replace
714
.EE
715
resembles the
716
.B Restart
717
command.  It is not exactly the same, since killing the previously
718
running wm may terminate your X session, if the wm was started as
719
the last client in your
720
.IR .Xclients " or " .Xsession
721
file.
722
723
Further additions are support for client-side colormap
724
installation (see the .SM ICCCM for details) and the urgency hint.
725
Clients can set this hint in the WM_HINTS property of their window
726
and expect the window manager to attract the users attention to
727
the window.  Fvwm has two re-definable functions for this purpose,
728
"UrgencyFunc" and "UrgencyDoneFunc", which are executed when the
729
flag is set/cleared.  Their default definitions are:
730
.EX
731
AddToFunc UrgencyFunc
732
 + I Iconify off
733
 + I FlipFocus
734
 + I Raise
735
 + I WarpToWindow 5p 5p
736
AddToFunc UrgencyDoneFunc
737
 + I Nop
738
.EE
739
740
.SH GNOME COMPLIANCE
741
742
Fvwm attempts to be
743
.SM GNOME
744
compliant.  Check
745
.B http://www.gnome.org
746
for what that may mean.
747
.SM GNOME
748
support is a compile time option which is on by default.  To
749
disable GNOME hints for some or all windows, the
750
.I GNOMEIgnoreHints
751
style can be used.
752
753
.SH MWM COMPATIBILITY
754
755
Fvwm provides options to emulate Motif Window Manager (Mwm) as
756
well as possible.  Please refer to the
757
.B Emulate
758
command as well as to the Mwm specific options of the
759
.BR Style " and " MenuStyle
760
commands for details.
761
762
.SH OPEN LOOK and XVIEW COMPATIBILITY
763
Fvwm supports all the Open Look decoration hints (except
764
pushpins). Most (perhaps all) Open Look applications have a
765
strange notion of keyboard focus handling.  Although a lot of work
766
went into fvwm to work well with these, you may still encounter
767
problems. Should you use any such application, please add the
768
following line to your .fvwm2rc:
769
.EX
770
Style * OLDecor
771
.EE
772
773
.SH M4 PREPROCESSING
774
775
.PP
776
M4 pre-processing is handled by a module in fvwm.  To get more
777
details, try man
778
.BR FvwmM4 .
779
In short, if you want fvwm to parse your files with m4, then
780
replace the command
781
.B Read
782
with
783
.B FvwmM4
784
in your
785
.I .fvwm2rc
786
file (if it appears at all), and start fvwm with the command
787
.EX
788
fvwm2 -cmd "FvwmM4 .fvwm2rc"
789
.EE
790
791
.SH CPP PREPROCESSING
792
793
.PP
794
Cpp is the C-language pre-processor.  fvwm offers cpp processing
795
which mirrors the m4 pre-processing.  To find out about it,
796
re-read the M4 section above, but replace "m4" with "cpp".
797
798
.SH AUTO-RAISE
799
800
.PP
801
Windows can be automatically raised when it receives focus, or
802
some number of milliseconds after it receives focus, by using the
803
auto-raise module,
804
.BR FvwmAuto .
805
806
.SH CONFIGURATION FILES
807
808
The configuration file is used to describe mouse and button
809
bindings, colors, the virtual display size, and related items.
810
The initialization configuration file is typically called
811
.IR .fvwm2rc .
812
By using the
813
.B Read
814
built-in, it is easy to read in new configuration files as you go.
815
816
Lines beginning with '#' are ignored by fvwm.  Lines starting with
817
'*' are expected to contain module configuration commands (rather
818
than configuration commands for fvwm itself). Like in shell
819
scripts embedded newlines in a configuration file line can be
820
quoted by preceding them with a backslash.  All lines linked in
821
this fashion are treated as a single line.  The newline itself is
822
ignored.
823
824
Fvwm makes no distinction between configuration commands and
825
built-in commands, so anything mentioned in the built-in commands
826
section can be placed on a line by itself for fvwm to execute as
827
it reads the configuration file, or it can be placed as an
828
executable command in a menu or bound to a mouse button or a
829
keyboard key.  It is left as an exercise for the user to decide
830
which function make sense for initialization and which ones make
831
sense for run-time.
832
833
834
.SH SUPPLIED CONFIGURATION
835
836
A sample configuration file,
837
.IR .fvwm2rc ,
838
is supplied with the fvwm distribution.  It is well commented and
839
can be used as a source of examples for fvwm configuration.
840
841
842
.\" .SH INTERNATIONALIZATION
843
.\" Internationalized fvwm enables to display not only LATIN-1
844
.\" characters but also multi byte characters such as Japanese,
845
.\" Korean, etc. You should set up your environment variable
846
.\" .IR LC_TYPE " or " LANG ,
847
.\" to enable this feature.  Also, you should specify proper
848
.\" .I FONTSET
849
.\" instead of
850
.\" .IR FONT .
851
.\" Note that no catalog-file or input-methods are implemented.
852
853
.SH KEYBOARD SHORTCUTS
854
855
Almost all window manager operations can be performed from the
856
keyboard so mouse-less operation should be possible.  In addition
857
to scrolling around the virtual desktop by binding the
858
.B Scroll
859
built-in to appropriate keys,
860
.BR Popup ", " Move ", " Resize ", "
861
and most other built-ins can be bound to keys.  Once a built in
862
function is started the pointer is moved by using the up, down,
863
left, and right arrows, and the action is terminated by pressing
864
return.  Holding down the
865
.SM Shift
866
key causes the pointer movement to go in larger steps and holding
867
down the
868
.SM control
869
key causes the cursor movement to go in smaller steps. Standard
870
emacs and vi cursor movement controls (
871
.SM Ctrl-n,
872
.SM Ctrl-p,
873
.SM Ctrl-f,
874
.SM Ctrl-b,
875
and
876
.SM Ctrl-j,
877
.SM Ctrl-k,
878
.SM Ctrl-h,
879
.SM Ctrl-l
880
) can be used instead of the arrow keys.
881
882
883
.SH SESSION MANAGEMENT
884
885
Fvwm supports session management according to the X Session
886
Management Protocol.  It saves and restores window position, size,
887
stacking order, desk, stickiness, shadedness, maximizedness,
888
iconifiedness for all windows. Furthermore, some global state is
889
saved.
890
891
Fvwm doesn't save any information regarding styles, decors,
892
functions or menus.  If you change any on these resources during a
893
session (e.g. by issuing
894
.B Style
895
commands or by using various modules), these changes are lost
896
after saving and restarting the session.  To become permanent,
897
such changes have to be added to the configuration file.
898
899
Note further that the current implementation has the following
900
anomaly when used on a multi-screen display: Starting fvwm for the
901
first time, fvwm manages all screens by forking a copy of itself
902
for each screen.  Every copy knows its parent and issuing a
903
.B Quit
904
command to any instance of fvwm kills the master and thus all
905
copies of fvwm.  When you save and restart the session, the
906
session manager brings up a copy of fvwm on each screen, but this
907
time they are started as individual instances managing one screen
908
only.  Thus a
909
.B Quit
910
kills only the copy it was sent to.  This is probably not a very
911
serious problem, since with session management, you are supposed
912
to quit a session through the session manager anyway. If it is
913
really needed,
914
.EX
915
Exec exec killall fvwm2
916
.EE
917
still kills all copies of fvwm.  Your system must have the
918
.B killall
919
command though.
920
921
.SH BOOLEAN ARGUMENTS
922
923
A number of commands take one or several boolean arguments.  These
924
take a few equivalent inputs: "yes", "on", "true", "t" and "y" all
925
evaluate to true while "no", "off", "false", "f" and "n" evaluate
926
to false.  Some commands allow "toggle" too which means that the
927
feature is disabled if it is currently enabled and vice versa.
928
929
.SH BUILT IN KEY AND MOUSE BINDINGS
930
931
The following commands are built-in to fvwm:
932
.EX
933
Key Help R A Popup MenuFvwmRoot
934
Key F1 R A Popup MenuFvwmRoot
935
Key Tab A M WindowList Root c c NoDeskSort
936
Key Escape A MC EscapeFunc
937
Mouse 0 R N Menu MenuFvwmRoot
938
Mouse 1 TS A FuncFvwmRaiseLowerX Move
939
Mouse 1 F  A FuncFvwmRaiseLowerX Resize
940
AddToFunc FuncFvwmRaiseLowerX I Raise
941
+ M $0
942
+ D Lower
943
.EE
944
The
945
.SM Help
946
and
947
.SM F1
948
keys invoke a built-in menu that fvwm creates.  This is primarily
949
for new users that have not created their own configuration
950
file. Either key on the root (background) window pops up an menu
951
to help you get started.
952
953
The
954
.SM Tab
955
key pressed anywhere with the
956
.SM Meta
957
key (same as the
958
.SM Alt
959
key on PC keyboards) held down pop-ups a window list.
960
961
Mouse button 1 on the title-bar or side frame can move, raise or
962
lower a window.
963
964
Mouse button 1 on the window corners can resize, raise or lower a
965
window.
966
967
You can override or remove these bindings. To remove the window
968
list binding, use this:
969
.EX
970
Key Tab A M -
971
.EE
972
973
.SH BUILT IN COMMANDS
974
975
Fvwm supports a set of built-in functions which can be bound to
976
keyboard or mouse buttons.  If fvwm expects to find a built-in
977
function in a command, but fails, it checks to see if the
978
specified command should have been
979
.EX
980
Function (rest of command)
981
.EE
982
or
983
.EX
984
Module (rest of command)
985
.EE
986
This allows complex functions or modules to be invoked in a manner
987
which is fairly transparent to the configuration file.
988
989
Example: the
990
.I .fvwm2rc
991
file contains the line
992
.EX
993
HelpMe
994
.EE
995
Fvwm looks for a built-in command called "HelpMe", and fails.
996
Next it looks for a user-defined complex function called "HelpMe".
997
If no such user defined function exists, Fvwm tries to execute a
998
module called "HelpMe".
999
1000
Note: There are many commands that affect look and feel of
1001
specific, some or all windows, like
1002
.BR Style ", " Mouse ", the " FvwmTheme
1003
module and many others.  For performance reasons such changes are
1004
not applied immediately but only when fvwm is idle, i.e. no user
1005
interaction or module input is pending.  Specifically, new
1006
.B Style
1007
options that are set in a function are not applied until after the
1008
function has completed.  This can sometimes lead to unwanted
1009
effects.
1010
1011
To force that all pending changes are applied immediately, use the
1012
.BR UpdateStyles ", " Refresh " or " RefreshWindow
1013
commands.
1014
1015
.SS QUOTING
1016
1017
Quotes are required only when needed to make fvwm consider two or
1018
more words to be a single argument.  Unnecessary quoting is
1019
allowed.  If you want a quote character in your text, you must
1020
escape it by using the backslash character.  For example, if you
1021
have a pop-up menu called "Window-Ops", then you don't need
1022
quotes:
1023
.EX
1024
Popup Window-Ops
1025
.EE
1026
but if you replace the dash with a space, then you need
1027
quotes:
1028
.EX
1029
Popup "Window Ops"
1030
.EE
1031
The supported quoting characters are double quotes, single quotes
1032
and reverse single quotes.  All three kinds of quotes are treated
1033
in the same way.  Single characters can be quoted with a preceding
1034
backslash.  Quoting single characters works even inside other
1035
kinds of quotes.
1036
1037
.SS COMMAND EXPANSION
1038
1039
Whenever a fvwm command line is executed, fvwm performs parameter
1040
expansion.  A parameter is a '$' followed by a single letter or a
1041
word enclosed in brackets ($[...]).  If fvwm encounters an
1042
unquoted parameter on the command line it expands it to a string
1043
indicated by the parameter name.  Unknown parameters are left
1044
untouched. Parameter expansion is performed before quoting.  To
1045
quote a '$' use "$$".  Note that module configuration lines
1046
(i.e. lines beginning with '*') are not fully expanded; for
1047
backward compatibility single alphabetic-letter parameters (like
1048
"$d" or "$n") are not expanded in these lines.
1049
1050
The general idea is to expand single letter parameters as soon as
1051
possible.  So a "$d" is expanded immediately when read by the
1052
parser, but "$3" is only expanded in the context of a complex
1053
function with at least four parameters.  Otherwise it is left
1054
untouched.  Similarly, "$c" is only expanded in the context of a
1055
window.
1056
1057
Parameter expansion in the
1058
.BR +
1059
command is different than in normal commands.  If the command is
1060
adding to a function, single letter parameters are expanded
1061
normally which is often not what was intended.  To suppress
1062
expansion the '$' has to be doubled.  Parameters enclosed in
1063
brackets are protected from parameter expansion in these commands
1064
so the '$' must not be doubled.
1065
1066
Example:
1067
1068
.EX
1069
# Print the current desk number, horizontal
1070
# page and the window's class.
1071
Echo $d $[page.nx] $c
1072
# But a function that prints $d needs $$,
1073
# but not before $[page.nx] or $c:
1074
AddToFunc PrintDeskNumber
1075
+ I Echo $$d $[page.nx] $c
1076
.EE
1077
1078
Note: If this funtion is called outside a window context, it will
1079
print "$c" instead of the class name.  It is usually not enough to
1080
have the pointer over a window to have a context window.  To force
1081
using the window with the focus, the
1082
.B Current
1083
command can be used:
1084
.EX
1085
Current Echo $d $[page.nx] $c
1086
.EE
1087
1088
The parameters known by fvwm are:
1089
1090
.in +.5i
1091
$$
1092
.in +.3i
1093
A literal '$'.
1094
.in -.3i
1095
.in -.5i
1096
1097
.in +.5i
1098
$.
1099
.in +.3i
1100
The absolute directory of the currently Read file.  Intended for
1101
creating relative and relocatable configuration trees.  If used
1102
outside of any read file, the returned value is '.'.
1103
.in -.3i
1104
.in -.5i
1105
1106
.in +.5i
1107
$c
1108
.in +.3i
1109
The window's resource class name or "$c" if no window is
1110
associated with the command.
1111
.in -.3i
1112
.in -.5i
1113
1114
.in +.5i
1115
$d
1116
.in +.3i
1117
The current desk number.
1118
.in -.3i
1119
.in -.5i
1120
1121
.in +.5i
1122
$n
1123
.in +.3i
1124
The window's name or "$n" if no window is associated with the
1125
command.
1126
.in -.3i
1127
.in -.5i
1128
1129
.in +.5i
1130
$r
1131
.in +.3i
1132
The window's resource name or "$r" if no window is associated with
1133
the command.
1134
.in -.3i
1135
.in -.5i
1136
1137
.in +.5i
1138
$v
1139
.in +.3i
1140
The first line printed by the -version command line option.
1141
.in -.3i
1142
.in -.5i
1143
1144
.in +.5i
1145
$w
1146
.in +.3i
1147
The window-id (expressed in hex, e.g. 0x10023c) of the window the
1148
command was called for or "$w" if no window is associated with the
1149
command.
1150
.in -.3i
1151
.in -.5i
1152
1153
.in +.5i
1154
$x
1155
.in +.3i
1156
The x coordinate of the current viewport.
1157
.in -.3i
1158
.in -.5i
1159
1160
.in +.5i
1161
$y
1162
.in +.3i
1163
The y coordinate of the current viewport.
1164
.in -.3i
1165
.in -.5i
1166
1167
.in +.5i
1168
$0 to $9
1169
.in +.3i
1170
The positional parameters given to a complex function (a function
1171
that has been defined with the
1172
.B AddToFunc
1173
command).  "$0" is replaced with the first parameter, "$1" with
1174
the second parameter and so on.  If the corresponding parameter is
1175
undefined, the "$..." is deleted from the command line.
1176
.in -.3i
1177
.in -.5i
1178
1179
.in +.5i
1180
$*
1181
.in +.3i
1182
All positional parameters given to a complex function.  This
1183
includes parameters that follow after "$9".
1184
.in -.3i
1185
.in -.5i
1186
1187
.in +.5i
1188
$[vp.x]
1189
$[vp.y]
1190
$[vp.width]
1191
$[vp.height]
1192
.in +.3i
1193
Either coordinate or the width or height of the current viewport.
1194
.in -.3i
1195
.in -.5i
1196
1197
.in +.5i
1198
$[desk.width]
1199
$[desk.height]
1200
.in +.3i
1201
The width or height of the whole desktop, i.e. the width or height
1202
multiplied by the number of pages in x or y direction.
1203
.in -.3i
1204
.in -.5i
1205
1206
.in +.5i
1207
$[page.nx]
1208
$[page.ny]
1209
.in +.3i
1210
The current page numbers, by X and Y axes, starting from 0.
1211
.IR page " is equivalent to " area " in the GNOME terminology."
1212
.in -.3i
1213
.in -.5i
1214
1215
.in +.5i
1216
$[w.x]
1217
$[w.y]
1218
$[w.width]
1219
$[w.height]
1220
.in +.3i
1221
Either coordinate or the width or height of the current window if
1222
it is not iconified.  If no window is associated with the command
1223
or the window is iconified, the string is left as is.
1224
.in -.3i
1225
.in -.5i
1226
1227
.in +.5i
1228
$[screen]
1229
.in +.3i
1230
The screen number fvwm is running on.  Useful for setups with
1231
multiple screens.
1232
.in -.3i
1233
.in -.5i
1234
1235
.in +.5i
1236
$[fg.cs<n>]
1237
.in -.5i
1238
.in +.5i
1239
$[bg.cs<n>]
1240
.in -.5i
1241
.in +.5i
1242
$[hilight.cs<n>]
1243
.in -.5i
1244
.in +.5i
1245
$[shadow.cs<n>]
1246
.in +.3i
1247
These class of parameters is replaced with the name of the
1248
foreground (fg), background (bg), hilight (hilight) or shadow
1249
(shadow) color that is defined in colorset <n> (replace <n> with
1250
zero or a positive integer).  For example "$[fg.cs3]" is expanded
1251
to the name of the foreground color of colorset 3 (in
1252
rgb:rrrr/gggg/bbbb form).  Please refer to the man page of the
1253
.B FvwmTheme
1254
module for details about colorsets.  Note that although other
1255
parameters cannot be used in module configuration lines, it is
1256
possible to use this class of parameters.  They can be used
1257
wherever a module expects a color name.  Since the
1258
.B FvwmTheme
1259
module is not running when fvwm first passes through its
1260
configuration file, you may not get the desired results if you use
1261
this in commands like
1262
.EX
1263
Style * HilightFore $[fg.cs0], HilightBack $[bg.cs0]
1264
.EE
1265
.in -.3i
1266
.in -.5i
1267
1268
.in +.5i
1269
$[...]
1270
.in +.3i
1271
If the string within the braces is neither of the above, fvwm
1272
tries to find an environment variable with this name and replaces
1273
its value if one is found (e.g. "$[PAGER]" could be replaced by
1274
"more").  Otherwise the string is left as is.
1275
.in -.3i
1276
.in -.5i
1277
1278
Some examples can be found in the description of the
1279
.B AddToFunc
1280
command.
1281
1282
.SS THE LIST OF BUILTIN COMMANDS
1283
1284
The commands descriptions below are grouped together in the
1285
following sections.  The sections are hopefully sorted in order of
1286
usefulness to the newcomer.
1287
.EX
1288
- Menu commands
1289
- Miscellaneous commands
1290
- Commands affecting window movement and placement
1291
- Commands for focus and mouse movement
1292
- Commands controlling window state
1293
- Commands for mouse, key and stroke bindings
1294
- The Style command (controlling window styles)
1295
- Other commands controlling window styles
1296
- Commands controlling the virtual desktop
1297
- Commands for user functions and shell commands
1298
- Conditional commands
1299
- Module commands
1300
- Quit, restart and session management commands
1301
- Color gradients
1302
.EE
1303
1304
.SS COMMANDS FOR MENUS
1305
1306
.TP
1307
.BI "AddToMenu " menu-name " [" menu-label " " action "]"
1308
1309
Begins or adds to a menu definition.  Typically a menu definition
1310
looks like this:
1311
.EX
1312
AddToMenu Utilities Utilities Title
1313
 + Xterm           Exec  exec xterm -e tcsh
1314
 + Rxvt            Exec  exec rxvt
1315
 + "Remote Logins" Popup Remote-Logins
1316
 + Top             Exec  exec rxvt -T Top -n \\
1317
                   Top -e top
1318
 + Calculator      Exec  exec xcalc
1319
 + Xman            Exec  exec xman
1320
 + Xmag            Exec  exec xmag
1321
 + emacs           Exec  exec xemacs
1322
 + Mail            MailFunction \\
1323
                   xmh "-font fixed"
1324
 + ""              Nop
1325
 + Modules         Popup Module-Popup
1326
 + ""              Nop
1327
 + Exit Fvwm       Popup Quit-Verify
1328
.EE
1329
The menu could be invoked via
1330
.EX
1331
Mouse 1 R A Menu Utilities Nop
1332
.EE
1333
or
1334
.EX
1335
Mouse 1 R A Popup Utilities
1336
.EE
1337
There is no end-of-menu symbol.  Menus do not have to be defined
1338
in a contiguous region of the
1339
.I .fvwm2rc
1340
file.  The quoted portion in the above examples is the menu label,
1341
which appears in the menu when the user pops it up.  The remaining
1342
portion is a built-in command which should be executed if the user
1343
selects that menu item.  An empty menu-label ("") and the
1344
.B Nop
1345
function can be used to insert a separator into the menu.
1346
1347
The keywords
1348
.IR DynamicPopUpAction " and " DynamicPopDownAction
1349
have a special meaning when used as the name of a menu item.  The
1350
action following the keyword is executed whenever the menu is
1351
popped up or down.  This way you can implement dynamic menus.  It
1352
is even possible to destroy itself with
1353
.B DestroyMenu
1354
and the rebuild from scratch.  When the menu has been destroyed
1355
(unless you used the
1356
.I recreate
1357
option when destroying the menu), do not forget to add the dynamic
1358
action again.
1359
1360
Note: Do not trigger actions that require user interaction. They
1361
will probably fail and may screw up your menus.  See
1362
.B Silent
1363
command.
1364
1365
Warning: Do not issue
1366
.B MenuStyle
1367
commands as dynamic menu actions.  Chances are good that this will
1368
crash fvwm.
1369
1370
Example (File browser):
1371
.EX
1372
# You can find the shell script
1373
# fvwm_make_browse_menu.sh in the utils
1374
# directory of the distribution.
1375
AddToMenu BrowseMenu
1376
+ DynamicPopupAction Piperead \\
1377
  'fvwm_make_browse_menu.sh BrowseMenu'
1378
.EE
1379
Example (Picture menu):
1380
.EX
1381
# Build a menu of all .jpg files in
1382
# $HOME/Pictures
1383
AddToMenu JpgMenu foo title
1384
+ DynamicPopupAction Function MakeJpgMenu
1385
1386
AddToFunc MakeJpgMenu
1387
+ I DestroyMenu recreate JpgMenu
1388
+ I AddToMenu JpgMenu Pictures Title
1389
+ I PipeRead 'for i in $HOME/Pictures/*.jpg; \\
1390
  do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'
1391
.EE
1392
The keyword
1393
.I MissingSubmenuFunction
1394
has a similar meaning.  It is executed whenever you try to pop up
1395
a sub-menu that does not exist.  With this function you can define
1396
and destroy menus on the fly.  You can use any command after the
1397
keyword, but the name of a function defined with
1398
.B AddToFunc
1399
follows it, fvwm executes this command:
1400
.EX
1401
Function <function-name> <menu-name>
1402
.EE
1403
I.e. the name is passed to the function as its first argument and
1404
can be referred to with "$0".
1405
1406
Example:
1407
.EX
1408
# There is another shell script
1409
# fvwm_make_directory_menu.sh in the utils
1410
# directory of the distribution. To use it,
1411
# define this function in your configuration
1412
# file:
1413
1414
AddToFunc MakeMissingDirectoryMenu
1415
+ I Exec fvwm_make_directory_menu.sh $0
1416
1417
AddToMenu SomeMenu
1418
+ MissingSubmenuFunction MakeMissingDirectoryMenu
1419
+ "Root directory" Popup /
1420
.EE
1421
This is another implementation of the file browser that uses
1422
sub-menus for subdirectories.
1423
1424
Titles can be used within the menu. If you add the option
1425
.I top
1426
behind the keyword
1427
.BR Title ,
1428
the title is added to the top of the menu.  If there was a title
1429
already, it is overwritten.
1430
.EX
1431
AddToMenu Utilities Tools Title top
1432
.EE
1433
All text up to the first
1434
.SM Tab
1435
in the menu label is aligned to the left side of the menu, all
1436
text right of the first
1437
.SM Tab
1438
is aligned to the left in a second column and all text thereafter
1439
is placed right aligned in the third column.  All other
1440
.SM Tabs
1441
are replaced by spaces.  Note that you can change this format with
1442
the
1443
.I ItemFormat
1444
option of the
1445
.B MenuStyle
1446
command.
1447
1448
If the menu-label contains an ampersand ('&'), the next character
1449
is taken as a hot-key for the menu item.  Hot-keys are underlined
1450
in the label.  To get a literal '&', insert "&&".  Pressing the
1451
hot-key moves through the list of menu items with this hot-key or
1452
selects an item that is the only one with this hot-key.
1453
1454
If the menu-label contains a sub-string which is set off by stars,
1455
then the text between the stars is expected to be the name of an
1456
xpm-icon or bitmap-file to insert in the menu.  To get a literal
1457
'*', insert "**".  For example
1458
.EX
1459
 + Calculator*xcalc.xpm* Exec exec xcalc
1460
.EE
1461
inserts a menu item labeled "Calculator" with a picture of a
1462
calculator above it.  The following:
1463
.EX
1464
 + *xcalc.xpm*           Exec exec xcalc
1465
.EE
1466
Omits the "Calculator" label, but leaves the picture.
1467
1468
If the menu-label contains a sub-string which is set off by
1469
percent signs, then the text between the percent signs is expected
1470
to be the name of an xpm-icon or bitmap-file (a so called mini
1471
icon to insert to the left of the menu label.  A second mini icon
1472
that is drawn at the right side of the menu can be given in the
1473
same way.  To get a literal '%', insert "%%". For example
1474
.EX
1475
 + Calculator%xcalc.xpm% Exec exec xcalc
1476
.EE
1477
inserts a menu item labeled "Calculator" with a picture of a
1478
calculator to the left.  The following:
1479
.EX
1480
 + %xcalc.xpm%           Exec exec xcalc
1481
.EE
1482
Omits the "Calculator" label, but leaves the picture.  The
1483
pictures used with this feature should be small (perhaps 16x16).
1484
If the menu-name (not the label) contains a sub-string which is
1485
set off by at signs ('@'), then the text between them is expected
1486
to be the name of an xpm or bitmap file to draw along the left
1487
side of the menu (a side pixmap).  You may want to use the
1488
.I SidePic
1489
option of the
1490
.B MenuStyle
1491
command instead.  To get a literal '@', insert "@@".  For example
1492
.EX
1493
AddToMenu StartMenu@linux-menu.xpm@
1494
.EE
1495
creates a menu with a picture in its bottom left corner.
1496
1497
If the menu-name also contains a sub-string surrounded by '^'s, then
1498
the text between '^'s is expected to be the name of an X11 color
1499
and the column containing the side picture is colored with that
1500
color.  You can set this color for a menu style using the
1501
.I SideColor
1502
option of the
1503
.B MenuStyle
1504
command.  To get a literal '^', insert "^^".  Example:
1505
.EX
1506
AddToMenu StartMenu@linux-menu.xpm@^blue^
1507
.EE
1508
creates a menu with a picture in its bottom left corner and
1509
colors with blue the region of the menu containing the picture.
1510
1511
In all the above cases, the name of the resulting menu is name
1512
specified, stripped of the substrings between the various
1513
delimiters.
1514
1515
.TP
1516
.BI "ChangeMenuStyle " "menustyle menu ..."
1517
Changes the menu style of
1518
.IR menu " to " menustyle .
1519
You may specified more than one menu in each call of
1520
.BR ChangeMenuStyle .
1521
.EX
1522
ChangeMenuStyle pixmap1 \\
1523
  ScreenSaverMenu ScreenLockMenu
1524
.EE
1525
1526
.TP
1527
.BI "CopyMenuStyle " "orig-menustyle dest-menustyle"
1528
Copy
1529
.IR orig-menustyle " to " dest-menustyle ,
1530
where
1531
.IR orig-menustyle
1532
is an existing menu style.  If the menu style
1533
.IR dest_menustyle
1534
does not exist, then it is created.
1535
1536
.TP
1537
.BI "DestroyMenu [" recreate "] " menu
1538
Deletes a menu, so that subsequent references to it are no longer
1539
valid.  You can use this to change the contents of a menu during
1540
an fvwm session.  The menu can be rebuilt using
1541
.BR AddToMenu .
1542
The optional parameter
1543
.I recreate
1544
tells fvwm not to throw away the menu completely but to throw away
1545
all the menu items (including the title).
1546
.EX
1547
DestroyMenu Utilities
1548
.EE
1549
1550
.TP
1551
.BI "DestroyMenuStyle " menustyle
1552
Deletes the menu style named
1553
.I menustyle
1554
and changes all menus using this style to the default style, you
1555
cannot destroy the default menu style.
1556
.EX
1557
DestroyMenuStyle pixamp1
1558
.EE
1559
1560
.IP "\fBMenu\fP \fImenu-name\fP \
1561
\fB[\fP \fIposition\fP \
1562
\fB] [\fP \fIdouble-click-action\fP \
1563
\fB]\fP"
1564
Causes a previously defined menu to be popped up in a sticky
1565
manner. That is, if the user invokes the menu with a click action
1566
instead of a drag action, the menu stays up.  The command
1567
.I double-click-action
1568
is invoked if the user double-clicks a button (or hits the key
1569
rapidly twice if the menu is bound to a key) when bringing up the
1570
menu.  If the double click action is not specified, double
1571
clicking on the menu does nothing.  However, if the menu begins
1572
with a menu item (i.e. not with a title or a separator) and the
1573
double click action is not given, double clicking invokes the
1574
first item of the menu (but only if the pointer really was over
1575
the item).
1576
1577
Several other commands affect menu operation.  See
1578
.BR MenuStyle " and " SetAnimation .
1579
When in a menu, keyboard shortcuts work as expected.  Cursor
1580
keystrokes are also allowed. Specifically,
1581
.SM Tab,
1582
.SM Meta-Tab,
1583
.SM Cursor-Down,
1584
.SM Ctrl-N,
1585
or
1586
.SM Ctrl-J
1587
move to the next item;
1588
.SM Shift-Tab,
1589
.SM Shift-Meta-Tab,
1590
.SM Cursor-Up,
1591
.SM Ctrl-P,
1592
or
1593
.SM Ctrl-K
1594
move to the prior item;
1595
.SM Cursor-Left
1596
or
1597
.SM Ctrl-B
1598
returns to the prior menu;
1599
.SM Cursor-Right
1600
or
1601
.SM Ctrl-F
1602
pop up the next menu;
1603
.SM Ctrl-Cursor-Up,
1604
.SM Shift-Ctrl-Meta-Tab
1605
and
1606
.SM Page-Up
1607
move up five items;
1608
.SM Ctrl-Cursor-Down,
1609
.SM Ctrl-Meta-Tab
1610
and
1611
.SM Page-Down
1612
move down five items, respectively;
1613
.SM Home,
1614
.SM Shift-Cursor-Up
1615
or
1616
.SM End,
1617
.SM Shift-Cursor-Down
1618
move to the first or last item, respectively;
1619
.SM Meta-Cursor-Up
1620
or
1621
.SM Meta-Cursor-Down
1622
move just behind the next or previous separator;
1623
.SM Shift-Ctrl-Tab
1624
or
1625
.SM Ctrl-Tab
1626
work exactly the same;
1627
.SM Enter,
1628
.SM Return,
1629
or
1630
.SM Space
1631
executes the current item;
1632
.SM Insert
1633
opens the "More..." sub-menu if any;
1634
.SM Escape
1635
and
1636
.SM Delete
1637
exit the current sequence of menus.
1638
1639
The pointer is warped to where it was when the menu was invoked if
1640
it was both invoked and terminated with a keystroke.
1641
1642
The
1643
.I position
1644
arguments allow placement of the menu somewhere on the screen, for
1645
example centered on the visible screen or above a title bar.
1646
Basically it works like this: you specify a
1647
.I context-rectangle
1648
and an offset to this rectangle by which the upper left corner of
1649
the menu is moved from the upper left corner of the rectangle.
1650
The
1651
.I position
1652
arguments consist of several parts:
1653
.EX
1654
.BI "[" context-rectangle "] " "x y" " [" special-options "]"
1655
.EE
1656
The
1657
.I context-rectangle
1658
can be one of:
1659
1660
.in +.5i
1661
.BR Root
1662
.in +.3i
1663
the root window of the current screen.
1664
.in -.3i
1665
.BR XineramaRoot
1666
.in +.3i
1667
the root window of the whole Xinerama screen.  Equivalent to
1668
"root" when Xinerama is not used.
1669
.in -.3i
1670
.BR Mouse
1671
.in +.3i
1672
a 1x1 rectangle at the mouse position.
1673
.in -.3i
1674
.BR Window
1675
.in +.3i
1676
the window with the focus.
1677
.in -.3i
1678
.BR Interior
1679
.in +.3i
1680
the inside of the focused window.
1681
.in -.3i
1682
.BR Title
1683
.in +.3i
1684
the title of the focused window or icon.
1685
.in -.3i
1686
.BR Button<n>
1687
.in +.3i
1688
button #n of the focused window.
1689
.in -.3i
1690
.BR Icon
1691
.in +.3i
1692
the focused icon.
1693
.in -.3i
1694
.BR Menu
1695
.in +.3i
1696
the current menu.
1697
.in -.3i
1698
.BR Item
1699
.in +.3i
1700
the current menu item.
1701
.in -.3i
1702
.BR Context
1703
.in +.3i
1704
the current window, menu or icon.
1705
.in -.3i
1706
.BR This
1707
.in +.3i
1708
whatever widget the pointer is on (e.g. a corner of a window or
1709
the root window).
1710
.in -.3i
1711
.BI "Rectangle <" geometry ">"
1712
.in +.3i
1713
the rectangle defined by
1714
.RI < geometry >
1715
in X geometry format.  Width and height default to 1 if omitted.
1716
.in -.3i
1717
.in -.5i
1718
1719
If the context-rectangle is omitted or illegal (e.g. "item" on a
1720
window), "Mouse" is the default.  Note that not all of these make
1721
sense under all circumstances (e.g. "Icon" if the pointer is on a
1722
menu).
1723
1724
The offset values
1725
.I x
1726
and
1727
.I y
1728
specify how far the menu is moved from it's default position.  By
1729
default, the numeric value given is interpreted as a percentage of
1730
the context rectangle's width (height), but with a trailing
1731
.RI ' m '
1732
the menu's width (height) is used instead.  Furthermore a trailing
1733
.RI ' p '
1734
changes the interpretation to mean pixels.
1735
1736
Instead of a single value you can use a list of values.  All
1737
additional numbers after the first one are separated from their
1738
predecessor by their sign.  Do not use any other separators.
1739
1740
If
1741
.IR x " or " y
1742
are prefixed with "o<number>" where <number> is an integer, the
1743
menu and the rectangle are moved to overlap at the specified
1744
position before any other offsets are applied.  The menu and the
1745
rectangle are placed so that the pixel at <number> percent of the
1746
rectangle's width/height is right over the pixel at <number>
1747
percent of the menu's width/height. So "o0" means that the
1748
top/left borders of the menu and the rectangle overlap, with
1749
"o100" it's the bottom/right borders and if you use "o50" they are
1750
centered upon each other (try it and you will see it is much
1751
simpler than this description).  The default is "o0".  The prefix
1752
"o<number>" is an abbreviation for "+<number>-<number>m".
1753
1754
A prefix of
1755
.RI ' c '
1756
is equivalent to "o50".  Examples:
1757
.EX
1758
# window list in the middle of the screen
1759
WindowList Root c c
1760
1761
# menu to the left of a window
1762
Menu name window -100m c+0
1763
1764
# popup menu 8 pixels above the mouse pointer
1765
Popup name mouse c -100m-8p
1766
1767
# somewhere on the screen
1768
Menu name rectangle 512x384+1+1 +0 +0
1769
1770
# centered vertically around a menu item
1771
AddToMenu foobar-menu
1772
 + "first item" Nop
1773
 + "special item" Popup "another menu" item \\
1774
                  +100 c
1775
 + "last item" Nop
1776
1777
# above the first menu item
1778
AddToMenu foobar-menu
1779
 + "first item" Popup "another menu" item \\
1780
                +0 -100m
1781
.EE
1782
Note that you can put a sub-menu far off the current menu so you
1783
could not reach it with the mouse without leaving the menu.  If
1784
the pointer leaves the current menu in the general direction of
1785
the sub-menu the menu stays up.
1786
1787
The
1788
.IR special-options :
1789
1790
.in +.5i
1791
The
1792
.IR animated " and " Mwm " or " Win
1793
menu styles may move a menu somewhere else on the screen.  If you
1794
do not want this you can add
1795
.I Fixed
1796
as an option.  This might happen for example if you want the menu
1797
always in the top right corner of the screen.
1798
1799
Where do you want a sub-menu to appear when you click on it's menu
1800
item? The default is to place the title under the cursor, but if
1801
you want it where the position arguments say, use the
1802
.I SelectInPlace
1803
option.  If you want the pointer on the title of the menu, use
1804
.I SelectWarp
1805
too. Note that these options apply only if the
1806
.IB "PopupAsRootMenu " MenuStyle
1807
option is used.
1808
1809
The pointer is warped to the title of a sub-menu whenever the
1810
pointer would be on an item when the sub-menu is popped up
1811
.RI ( fvwm
1812
menu style) or never warped to the title at all
1813
.RI ( Mwm " or " Win
1814
menu styles). You can force (forbid) warping whenever the sub-menu
1815
is opened with the
1816
.IR WarpTitle " (" NoWarp ") option."
1817
1818
Note that the
1819
.I special-options
1820
do work with a normal menu that has no other position arguments.
1821
.in -.5i
1822
1823
.TP
1824
.BI "MenuStyle " "stylename options"
1825
Sets a new menu style or changes a previously defined style.  The
1826
.I stylename
1827
is the style name; if it contains spaces or tabs it has to be
1828
quoted.  The name "*" is reserved for the default menu style. The
1829
default menu style is used for every menu-like object (e.g. the
1830
window created by the
1831
.B WindowList
1832
command) that had not be assigned a style using the
1833
.BR ChangeMenuStyle .
1834
See also
1835
.BR DestroyMenuStyle .
1836
When using monochrome color options are ignored.
1837
1838
.I options
1839
is a comma separated list containing some of the keywords
1840
Fvwm / Mwm / Win,
1841
BorderWidth,
1842
Foreground,
1843
Background,
1844
Greyed,
1845
HilightBack / HilightBackOff,
1846
ActiveFore / ActiveForeOff,
1847
MenuColorset,
1848
ActiveColorset,
1849
GreyedColorset,
1850
Hilight3DThick / Hilight3DThin / Hilight3DOff,
1851
Hilight3DThickness,
1852
Animation / AnimationOff,
1853
Font,
1854
MenuFace,
1855
PopupDelay,
1856
PopupOffset,
1857
TitleWarp / TitleWarpOff,
1858
TitleUnderlines0 / TitleUnderlines1 / TitleUnderlines2,
1859
SeparatorsLong / SeparatorsShort,
1860
TrianglesSolid / TrianglesRelief,
1861
PopupImmediately / PopupDelayed,
1862
PopdownImmediately / PopdownDelayed,
1863
DoubleClickTime,
1864
SidePic,
1865
SideColor,
1866
PopupAsRootMenu / PopupAsSubmenu,
1867
RemoveSubmenus / HoldSubmenus,
1868
SubmenusRight / SubmenusLeft,
1869
SelectOnRelease,
1870
ItemFormat,
1871
VerticalItemSpacing,
1872
VerticalTitleSpacing,
1873
AutomaticHotkeys / AutomaticHotkeysOff.
1874
1875
In the above list some options are listed as option pairs or
1876
triples with a '/' in between.  These options exclude each other.
1877
1878
.IR Fvwm ", " Mwm ", " Win
1879
reset all options to the style with the same name in former
1880
versions of fvwm.  The default for new menu styles is
1881
.I Fvwm
1882
style.  These options override all others except
1883
.IR Foreground ", " Background ", " Greyed ", " HilightBack ", "
1884
.IR HilightFore " and " PopupDelay ,
1885
so they should be used only as the first option specified for a
1886
menu style or to reset the style to defined behavior.  The same
1887
effect can be created by setting all the other options one by one.
1888
1889
.IR Mwm " and " Win
1890
style menus popup sub-menus automatically.
1891
.I Win
1892
menus indicate the current menu item by changing the background to dark.
1893
.I Fvwm
1894
sub-menus overlap the parent menu,
1895
.IR Mwm " and " Win
1896
style menus never overlap the parent menu.
1897
1898
.I Fvwm
1899
style is equivalent to HilightBackOff, Hilight3DThin,
1900
ActiveForeOff, AnimationOff, Font, MenuFace, PopupOffset 0 67,
1901
TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief,
1902
PopupDelayed, PopdownDelayed, PopupAsSubmenu, HoldSubmenus,
1903
SubmenusRight, BorderWidth 2, AutomaticHotkeysOff.
1904
1905
.I Mwm
1906
style is equivalent to HilightBackOff, Hilight3DThick,
1907
ActiveForeOff, AnimationOff, Font, MenuFace, PopupOffset -3 100,
1908
TitleWarpOff, TitleUnderlines2, SeparatorsLong, TrianglesRelief,
1909
PopupImmediately, PopdownDelayed, PopupAsSubmenu, HoldSubmenus,
1910
SubmenusRight, BorderWidth 2, AutomaticHotkeysOff.
1911
1912
.I Win
1913
style is equivalent to HilightBack, Hilight3DOff, ActiveForeOff,
1914
AnimationOff, Font, MenuFace, PopupOffset -5 100, TitleWarpOff,
1915
TitleUnderlines1, SeparatorsShort, TrianglesSolid,
1916
PopupImmediately, PopdownDelayed, PopupAsSubmenu, RemoveSubmenus,
1917
SubmenusRight, BorderWidth 2, AutomaticHotkeysOff.
1918
1919
.I BorderWidth
1920
takes the thickness of the border around the menus in pixels. It
1921
may be zero to 50 pixels.  The default is 2.  Using an illegal
1922
value reverts the border width to the default.
1923
1924
.IR Foreground " and " Background
1925
may have a color name as an argument.  This color is used for menu
1926
text or the menu's background.  You can omit the color name to
1927
reset these colors to the built in default.
1928
1929
.I Greyed
1930
may have a color name as an argument.  This color is the one used
1931
to draw a menu-selection which is prohibited (or not recommended)
1932
by the Mwm hints which an application has specified. If the color
1933
is omitted the color of greyed menu entries is based on the
1934
background color of the menu.
1935
1936
.IR HilightBack " and " HilightBackOff
1937
switch hilighting the background of the selected menu item on and
1938
off.  A specific background color may be used by providing the
1939
color name as an argument to
1940
.IR HilightBack .
1941
If you use this option without an argument the color is based on
1942
the menu's background color.
1943
1944
.I ActiveFore " and " ActiveForeOff
1945
switch hilighting the foreground of the selected menu item on and
1946
off.  A specific foreground color may be used by providing the
1947
color name as an argument to
1948
.IR ActiveFore .
1949
Omitting the color name has the same effect as using
1950
.IR ActiveForeOff .
1951
1952
.I MenuColorset
1953
controls if a colorset is used instead of the
1954
.IR Foreground ", " Background " and " MenuFace
1955
menu styles.  If the
1956
.I MenuColorset
1957
keyword is followed by a number equal to zero or greater, this
1958
number is taken as the number of the colorset to use.  If the
1959
number is omitted, the colorset is switched off and the regular
1960
menu styles are used again.  The foreground and background colors
1961
of the menu items are replaced by the colors from the colorset.
1962
If the colorset has a pixmap defined, this pixmap is used as the
1963
background of the menu.  Note that the
1964
.I MenuFace
1965
menu style has been optimized for memory consumption and may use
1966
less memory than the background from a colorset.  The shape mask
1967
from the colorset is used to shape the menu.  Please refer to the
1968
description of the
1969
.B Colorset
1970
command and the documentation of the
1971
.B FvwmTheme
1972
module for details about colorsets.
1973
1974
.I ActiveColorset
1975
works exactly like
1976
.IR MenuColorset ,
1977
but the foreground from the colorset replaces the color given with
1978
the
1979
.I ActiveFore
1980
menu style and the colorset's background color replaces the color
1981
given with the
1982
.I HilightBack
1983
command (to turn on background hilighting you have to use the
1984
.I HilightBack
1985
menu style too).  If specified, the hilight and shadow colors
1986
from the colorset are used too.  The pixmap and shape mask from
1987
the colorset are not used.
1988
1989
.I GreyedColorset
1990
works exactly like
1991
.IR MenuColorset ,
1992
but the foreground from the colorset replaces the color given with
1993
the
1994
.I Greyed
1995
menu style.  No other parts of the colorset are used.
1996
1997
.IR Hilight3DThick ", " Hilight3DThin " and " Hilight3DOff
1998
determine if the selected menu item is hilighted with a 3D
1999
relief. Thick reliefs are two pixels wide, thin reliefs are one
2000
pixel wide.
2001
2002
.I Hilight3DThickness
2003
takes one numeric argument that may be between -50 and +50
2004
pixels. With negative values the menu item gets a pressed in look.
2005
The above three commands are equivalent to a thickness of 2, 1 and
2006
0.
2007
2008
.IR Animation " and " AnimationOff
2009
turn menu animation on or off.  When animation is on, sub-menus
2010
that don't fit on the screen cause the parent menu to be shifted
2011
to the left so the sub-menu can be seen.
2012
2013
.I Font
2014
takes a font name as an argument.  If a font by this name exists
2015
it is used for the text of all menu items.  If it does not exist
2016
or if the name is left blank the built in default is used.
2017
2018
.I MenuFace
2019
enforces a fancy background upon the menus.  You can use the same
2020
options for
2021
.I MenuFace
2022
as for the
2023
.BR ButtonStyle .
2024
See description of
2025
.B ButtonStyle
2026
command and the
2027
.B COLOR GRADIENTS
2028
sections for more information.  If you use
2029
.I MenuFace
2030
without arguments the style is reverted back to normal.
2031
2032
Some examples of MenuFaces are:
2033
.EX
2034
MenuFace DGradient 128 2 lightgrey 50 blue 50 \\
2035
  white
2036
MenuFace TiledPixmap texture10.xpm
2037
MenuFace HGradient 128 2 Red 40 Maroon 60 \\
2038
  White
2039
MenuFace Solid Maroon
2040
.EE
2041
Note: The gradient styles H, V, B and D are optimized for high
2042
speed and low memory consumption in menus.  This is not the case
2043
for all the other gradient styles.  They may be slow and consume
2044
huge amounts of memory, so if you encounter performance problems
2045
with them you may be better off by not using them.  To improve
2046
performance you can try one or all of the following:
2047
2048
Turn hilighting of the active menu item other than foreground
2049
color off:
2050
.EX
2051
MenuStyle <style> Hilight3DOff, HilightBackOff
2052
MenuStyle <style> ActiveFore <preferred color>
2053
.EE
2054
Make sure sub-menus do not overlap the parent menu. This can
2055
prevent menus being redrawn every time a sub-menu pops up or down.
2056
.EX
2057
MenuStyle <style> PopupOffset 1 100
2058
.EE
2059
Run you X server with backing storage.  If your X Server is
2060
started with the -bs option, turn it off.  If not try the -wm
2061
option.
2062
.EX
2063
startx -- -wm
2064
.EE
2065
You may have to adapt this example to your system (e.g. if you use
2066
xinit to start X).
2067
2068
.I PopupDelay
2069
requires one numeric argument.  This value is the delay in
2070
milliseconds before a sub-menu is popped up when the pointer moves
2071
over a menu item that has a sub-menu.  If the value is zero no
2072
automatic pop up is done.  If the argument is omitted the built in
2073
default is used. Note that the popup delay has no effect if the
2074
.I PopupImmediately
2075
option is used since sub-menus pop up immediately then.
2076
2077
.I PopupImmediately
2078
makes menu items with sub-menus pop up it up as soon as the
2079
pointer enters the item.  The
2080
.I PopupDelay option
2081
is ignored then.  If
2082
.I PopupDelayed
2083
is used fvwm looks at the
2084
.I PopupDelay
2085
option if or when this automatic popup happens.
2086
2087
.I PopdownDelay
2088
works exactly like
2089
.I PopupDelay
2090
but determines the timeout of the
2091
.I PopupDelayed
2092
style.
2093
2094
.I PopdownImmediately
2095
makes sub-menus vanish as soon as the pointer leaves the sub-menu
2096
and the correspondent item in the parent menu.  With the opposite
2097
option
2098
.I PopdownDelayed
2099
the sub-menu only pops down after the time specified with the
2100
.I PopdownDelay
2101
option.  This comes handy when the pointer often strays off the
2102
menu item when trying to move into the sub-menu.  Whenever there
2103
is a conflict between the
2104
.IR PopupImmediately ", " PopupDelayed ", " PopupDelay
2105
styles and the
2106
.IR PopdownImmediately ", " PopdownDelayed ", " PopdownDelay
2107
styles, the
2108
.I Popup...
2109
styles win when using mouse navigation and the
2110
.I Popdown...
2111
styles win when navigating with the keyboard.
2112
2113
.I PopupOffset
2114
requires two integer arguments.  Both values affect where
2115
sub-menus are placed relative to the parent menu.  If both values
2116
are zero, the left edge of the sub-menu overlaps the left edge of
2117
the parent menu.  If the first value is non-zero the sub-menu is
2118
shifted that many pixels to the right (or left if negative).  If
2119
the second value is non-zero the menu is moved by that many
2120
percent of the parent menu's width to the right or left.
2121
2122
.IR TitleWarp " and " TitleWarpOff
2123
affect if the pointer warps to the menu title when a sub-menu is
2124
opened or not. Note that regardless of this setting the pointer is
2125
not warped if the menu does not pop up under the pointer.
2126
2127
.IR TitleUnderlines0 ", " TitleUnderlines1 " and " TitleUnderlines2
2128
specify how many lines are drawn below a menu title.
2129
2130
.IR SeparatorsLong " and " SeparatorsShort
2131
set the length of menu separators.  Long separators run from the
2132
left edge all the way to the right edge.  Short separators leave a
2133
few pixels to the edges of the menu.
2134
2135
.IR TrianglesSolid " and " TrianglesRelief
2136
affect how the small triangles for sub-menus is drawn.  Solid
2137
triangles are filled with a color while relief triangles are
2138
hollow.
2139
2140
.I DoubleClickTime
2141
requires one numeric argument.  This value is the time in
2142
milliseconds between two mouse clicks in a menu to be considered
2143
as a double click.  The default is 450 milliseconds.  If the
2144
argument is omitted the double click time is reset to this
2145
default.
2146
2147
.I SidePic
2148
takes the name of an xpm or bitmap file as an argument. The
2149
picture is drawn along the left side of the menu.  The
2150
.I SidePic
2151
option can be overridden by a menu specific side pixmap (see
2152
.BR AddToMenu ).
2153
If the file name is omitted an existing side pixmap is remove from
2154
the menu style.
2155
2156
.I SideColor
2157
takes the name of an X11 color as an argument. This color is used
2158
to color the column containing the side picture (see
2159
above). The SideColor option can be overridden by a menu specific
2160
side color (see
2161
.BR AddToMenu ).
2162
If the color name is omitted the side color option is switched off.
2163
2164
.IR PopupAsRootMenu " and " PopupAsSubmenu
2165
change the behavior when you click on a menu item that opens a
2166
sub-menu. With
2167
.I PopupAsRootMenu
2168
the original menu is closed before the sub-menu appears, with
2169
.I PopupAsSubmenu
2170
it is not, so you can navigate back into the
2171
parent menu.  Furthermore, with
2172
.I PopupAsSubmenu
2173
the sub-menu is held open (posted) regardless of where you move
2174
the mouse.  Depending on your menu style this may simplify
2175
navigating through the menu.  Any keystroke while a menu is posted
2176
reverts the menu back to the normal behavior.
2177
.I PopupAsSubmenu
2178
is the default.
2179
2180
.I RemoveSubmenus
2181
instructs fvwm to remove sub-menus when you move back into the
2182
parent menu.  With
2183
.I HoldSubmenus
2184
the sub-menu remains visible.  You probably want to use
2185
.I HoldSubmenus
2186
if you are using the
2187
.I PopupDelayed
2188
style.
2189
.I RemoveSubmenus
2190
affects menu navigation with the keyboard.
2191
2192
.I SelectOnRelease
2193
takes an optional key name as an argument.  If the given key is
2194
release in a menu using this style, the current menu item is
2195
selected.  This is intended for
2196
.SM Alt-Tab
2197
.B WindowList
2198
navigation.  The key name is a standard X11 key name as defined in
2199
.IR /usr/include/X11/keysymdef.h ,
2200
with the leading "XK_" omitted.  To disable this behaviour, omit
2201
the key name.
2202
2203
Note: Some X servers do not support KeyRelease events.
2204
.I SelectOnRelease
2205
does not work on such a machine.
2206
2207
.I ItemFormat
2208
takes a special string as its argument that determines the layout
2209
of the menu items.  Think of the format string as if it were a
2210
menu item.  All you have to do is tell fvwm where to place the
2211
different parts of the menu item (i.e. the labels, the triangle
2212
denoting a sub menu, the mini icons and the side pic) in the blank
2213
area.  The string consists of spaces,
2214
.SM Tab
2215
characters and formatting directives beginning with '%'. Any
2216
illegal characters and formatting directives are silently ignored:
2217
2218
.in +.5i
2219
.BR %l ", " %c " and " %r
2220
.in +.3i
2221
Insert the next item label.  Up to three labels can be used. The
2222
item column is left-aligned
2223
.RB ( %l ),
2224
centered
2225
.RB ( %c )
2226
or right-aligned
2227
.RB ( %r ).
2228
.in -.3i
2229
.B %i
2230
.in +.3i
2231
Inserts the mini icon.
2232
.in -.3i
2233
.BR %> " and " %<
2234
.in +.3i
2235
Insert the sub-menu triangle pointing either to the right
2236
.RB ( %> )
2237
or to the left
2238
.RB ( %< )
2239
.in -.3i
2240
.B %|
2241
.in +.3i
2242
The first
2243
.B %|
2244
denotes the beginning of the area that is highlighted either with
2245
a background color or a relief (or both).  The second
2246
.B %|
2247
marks the end of this area.
2248
.B %|
2249
can be used up to twice in the string.  If you don't add one or
2250
both of them, fvwm sets the margins to the margins of the whole
2251
item (not counting the side picture).
2252
.in -.3i
2253
.B %s
2254
.in +.3i
2255
Places the side picture either at the beginning or the end of the
2256
menu. This directive may be used only once and only as the first
2257
or last in the format string. If the
2258
.B %s
2259
is not at the beginning of the string, all characters to the right
2260
of it are silently ignored.
2261
.in -.3i
2262
.BR Space ", " Tab ", " %Space " and " %Tab
2263
.in +.3i
2264
Add a gap as large as one respectively eight spaces are with the
2265
font used in the menu items.  The whole string must be quoted if
2266
spaces or tabs are used.
2267
.in -.3i
2268
.B %p
2269
.in +.3i
2270
Like
2271
.SM Space
2272
and
2273
.SM Tab
2274
.B %p
2275
inserts an empty area into the item, but with better control of
2276
its size (see below).
2277
.in -.3i
2278
.in -.5i
2279
2280
You can define an additional space before and after each of the
2281
objects like this:
2282
.EX
2283
.BI % left . right p
2284
.EE
2285
This means: if the object is defined in the menu (e.g. if it is
2286
.B %s
2287
and you use a side picture, or it is
2288
.B %l
2289
for the third column and there are items defined that actually
2290
have a third column), then add
2291
.I left
2292
pixels before the object and
2293
.I right
2294
pixels after it.  You may leave out the
2295
.I left
2296
or the
2297
.I .right
2298
parts if you don't need them.  All values up to the screen width
2299
are allowed.  Even negative values can be used with care.  The
2300
.B p
2301
may be replaced with any other formatting directives described
2302
above.
2303
2304
Note: Only items defined in the format string are visible in the
2305
menus. So if you do not put a
2306
.B %s
2307
in there you do not see a side picture, even if one is specified.
2308
2309
Note: The
2310
.I SubmenusLeft
2311
style changes the default
2312
.I ItemFormat
2313
string, but if it was set manually it is not modified.
2314
2315
Note: If any unformatted title of the menu is wider than the
2316
widest menu item, the spaces between the different parts of the
2317
menu items are enlarged to match the width of the title.  Leading
2318
left aligned objects in the format string
2319
.RB ( %l ", " %i ", "%< ", first " %| )
2320
stick to the left edge of the menu and trailing right aligned
2321
objects
2322
.RB ( %r ", " %i ", "%> ", second " %| )
2323
stick to the right edge.  The gaps between the remaining items are
2324
enlarged equally.
2325
2326
Examples:
2327
.EX
2328
MenuStyle * ItemFormat \\
2329
  "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
2330
.EE
2331
Is the default string used by fvwm: (side picture + 4 pixels gap)
2332
(beginning of the hilighted area + 1 pixel gap) (mini icon + 5p)
2333
(first column left aligned + 5p) (second column left aligned + 5p)
2334
(third column right aligned + 5p) (second mini icon + 5p) (2p +
2335
sub-menu triangle + 3p) (1p + end of hilighted area).
2336
.EX
2337
MenuStyle * ItemFormat \\
2338
  "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"
2339
.EE
2340
Is used by fvwm with the
2341
.I SubmenusLeft
2342
option below.
2343
2344
.IR VerticalItemSpacing " and " VerticalTitleSpacing
2345
control the vertical spacing of menu items and titles like
2346
.I ItemFormat
2347
controls the horizontal spacing.  Both take two numeric arguments
2348
that may range from -100 to +100.  The first is the gap in pixels
2349
above a normal menu item (or a menu title), the second is the gap
2350
in pixels below it.  Negative numbers do not make much sense and
2351
may screw up the menu completely.  If no arguments are given or
2352
the given arguments are invalid, the built in defaults are used:
2353
one pixel above the item or title and two below.
2354
2355
.I SubmenusLeft
2356
mirrors the menu layout and behavior.  Sub-menus pop up to the
2357
left, the sub-menu triangle is drawn left and the mini icon and
2358
side picture are drawn at the right side of the menu.  The default
2359
is
2360
.IR SubmenusRight .
2361
The position hints of a menu are also affected by this setting,
2362
i.e. position hints using
2363
.IR item " or " menu
2364
as context rectangle and position hints using
2365
.I m
2366
offsets.
2367
2368
.IR AutomaticHotkeys " and " AutomaticHotkeysOff
2369
control the menu's ability to automatically provide hot-keys on
2370
the first character of each menu item's label.  This behavior is
2371
always overridden if an explicit hot-key is assigned in the
2372
.B AddToMenu
2373
command.
2374
2375
Examples:
2376
.EX
2377
MenuStyle * Mwm
2378
MenuStyle * Foreground Black, Background gray40
2379
MenuStyle * Greyed gray70, ActiveFore White
2380
MenuStyle * HilightBackOff, Hilight3DOff
2381
MenuStyle * Font lucidasanstypewriter-14
2382
MenuStyle * MenuFace DGradient 64 darkgray \\
2383
  MidnightBlue
2384
2385
MenuStyle red Mwm
2386
MenuStyle red Foreground Yellow
2387
MenuStyle red Background Maroon
2388
MenuStyle red Greyed Red, ActiveFore Red
2389
MenuStyle red HilightBackOff, Hilight3DOff
2390
MenuStyle red Font lucidasanstypewriter-12
2391
MenuStyle red MenuFace DGradient 64 Red Black
2392
.EE
2393
Note that all style options could be placed on a single line for
2394
each style name.
2395
2396
.TP
2397
.BI "MenuStyle " "forecolor backcolor shadecolor font style" " [" anim "]"
2398
This is the old syntax of the
2399
.B MenuStyle
2400
command.  It is obsolete and may be removed in the future.  Please
2401
use the new syntax as described above.
2402
2403
Sets the menu style.  When using monochrome the colors are
2404
ignored.  The
2405
.I shadecolor
2406
is the one used to draw a menu-selection which is prohibited (or
2407
not recommended) by the Mwm hints which an application has
2408
specified.  The style option is either
2409
.IR Fvwm ", " Mwm " or " Win ,
2410
which changes the appearance and operation of the menus.
2411
2412
.IR Mwm " and " Win
2413
style menus popup sub-menus automatically.
2414
.I win
2415
menus indicate the current menu item by changing the background to
2416
black.
2417
.I fvwm
2418
sub-menus overlap the parent menu,
2419
.IR Mwm " and " win
2420
style menus never overlap the parent menu.
2421
2422
When the
2423
.I anim
2424
option is given, sub-menus that don't fit on the screen cause the
2425
parent menu to be shifted to the left so the sub-menu can be
2426
seen. See also
2427
.B SetAnimation
2428
command.
2429
2430
.TP
2431
.BI "Popup " PopupName " [" position "] [" default-action "]"
2432
This built-in has two purposes: to bind a menu to a key or mouse
2433
button, and to bind a sub-menu into a menu.  The formats for the
2434
two purposes differ slightly.  The
2435
.I position
2436
arguments are the same as for
2437
.BR Menu .
2438
The command
2439
.I default-action
2440
is invoked if the user clicks a button to invoke the menu and
2441
releases it immediately again (or hits the key rapidly twice if
2442
the menu is bound to a key).  If the default action is not
2443
specified, double clicking on the menu does nothing.  However, if
2444
the menu begins with a menu item (i.e. not with a title or a
2445
separator) and the default action is not given, double clicking
2446
invokes the first item of the menu (but only if the pointer really
2447
was over the item).
2448
2449
To bind a previously defined pop-up menu to a key or mouse button:
2450
.sp
2451
.in +.25i
2452
The following example binds mouse buttons 2 and 3 to a pop-up
2453
called "Window Ops".  The menu pops up if the buttons 2 or 3 are
2454
pressed in the window frame, side-bar, or title-bar, with no
2455
modifiers (none of shift, control, or meta).
2456
.EX
2457
Mouse 2 FST N Popup "Window Ops"
2458
Mouse 3 FST N Popup "Window Ops"
2459
.EE
2460
Pop-ups can be bound to keys through the use of the
2461
.B Key
2462
built-in.  Pop-ups can be operated without using the mouse by
2463
binding to keys and operating via the up arrow, down arrow, and
2464
enter keys.
2465
.in -.25i
2466
.sp
2467
To bind a previously defined pop-up menu to another menu, for use
2468
as a sub-menu:
2469
.sp
2470
.in +.25i
2471
The following example defines a sub-menu "Quit-Verify" and binds
2472
it into a main menu, called "RootMenu":
2473
.EX
2474
AddToMenu Quit-Verify
2475
 + "Really Quit Fvwm?" Title
2476
 + "Yes, Really Quit"  Quit
2477
 + "Restart Fvwm"      Restart
2478
 + "Restart Fvwm 1.xx" Restart fvwm1 -s
2479
 + ""                  Nop
2480
 + "No, Don't Quit"    Nop
2481
2482
AddToMenu RootMenu "Root Menu" Title
2483
 + "Open XTerm Window" Popup NewWindowMenu
2484
 + "Login as Root"     Exec exec xterm \\
2485
                         -fg green -T Root \\
2486
                         -n Root -e su -
2487
 + "Login as Anyone"   Popup AnyoneMenu
2488
 + "Remote Hosts"      Popup HostMenu
2489
 + ""                  Nop
2490
 + "X utilities"       Popup Xutils
2491
 + ""                  Nop
2492
 + "Fvwm Modules"      Popup Module-Popup
2493
 + "Fvwm Window Ops"   Popup Window-Ops
2494
 + ""                  Nop
2495
 + "Previous Focus"    Prev (AcceptsFocus) Focus
2496
 + "Next Focus"        Next (AcceptsFocus) Focus
2497
 + ""                  Nop
2498
 + "Refresh screen"    Refresh
2499
 + "Recapture screen"  Recapture
2500
 + ""                  Nop
2501
 + "Reset X defaults"  Exec xrdb -load \\
2502
                       $HOME/.Xdefaults
2503
 + ""                  Nop
2504
 + ""                  Nop
2505
 + Quit                Popup Quit-Verify
2506
.EE
2507
.in -.25i
2508
.sp
2509
.B Popup
2510
differs from
2511
.B Menu
2512
in that pop-ups do not stay up if the user simply clicks.  These
2513
are popup-menus, which are a little hard on the wrist.
2514
.B Menu
2515
menus stay up on a click action.  See the
2516
.B Menu
2517
command for an explanation of the interactive behavior of menus. A
2518
menu can be open up to ten times at once, so a menu may even use
2519
itself or any of its predecessors as a sub-menu.
2520
2521
.TP
2522
.BI "Title"
2523
Does nothing.  This is used to insert a title line in a popup or
2524
menu.
2525
2526
.SS MISCELLANEOUS COMMANDS
2527
2528
.TP
2529
.BI "BugOpts [" option " [" bool "]], " ...
2530
This command controls several workarounds for bugs in third party
2531
programs.  The individual options are separated by commas.  The
2532
optional argument
2533
.I bool
2534
is a boolean argument and controls if the bug workaround is
2535
enabled or not.  It can either be "True" or "False" to turn the
2536
option on or off, or "toggle" to switch is back and forth.  If
2537
.I bool
2538
is omitted, the default setting is restored.
2539
2540
.I FlickeringMoveWorkaround
2541
disables ConfigureNotify events that are usually sent to
2542
an application while it is moved.  If some windows flicker
2543
annoyingly while being moved, this option may help you.  Note that
2544
if this problem occurs it is not an fvwm bug, it is a problem of the
2545
application.
2546
2547
.I MixedVisualWorkaround
2548
makes fvwm install the root colormap before it does some
2549
operations using the root window visuals.  This is only useful
2550
when the
2551
.B -visual
2552
option is used to start fvwm and then only with some
2553
configurations of some servers (e.g. Exceed 6.0 with an 8 bit
2554
PseudoColor root and fvwm using a 24 bit TrueColor visual).
2555
2556
The
2557
.I ModalityIsEvil
2558
option controls whether Motif applications have the ability to have
2559
modal dialogs (dialogs that force you to close them first before
2560
you can do anything else).  The default is to not allow
2561
applications to have modal dialogs.  Use this option with care.
2562
Once this option is turned on, you have to restart fvwm to turn it
2563
off.
2564
2565
.I RaiseOverNativeWindows
2566
makes fvwm try to raise the windows it manages over native windows
2567
of the X servers host system.  This is needed for some X servers
2568
running under Windows or Windows NT.  Fvwm tries to detect if it
2569
is running under such an X server and initializes the flag
2570
accordingly.
2571
2572
.I RaiseOverUnmanaged
2573
makes fvwm try to raise the windows it manages over
2574
override_redirect windows.  This is used to cope with ill-mannered
2575
applications that use long-lived windows of this sort, contrary to
2576
.SM ICCCM
2577
conventions.
2578
2579
.I FlickeringQtDialogsWorkaround
2580
suppresses flickering of the focused window in some modules when
2581
using KDE or Qt applications with application modal dialog
2582
windows.  By default this option is turned on.  This option may be
2583
visually disturbing for other applications using windows not
2584
managed by fvwm.  Since these applications are rare it is most
2585
likely safe to leave this option at its default.
2586
2587
.TP
2588
.BI "BusyCursor [" "Option bool" "], " ...
2589
This command controls the cursor during the execution of certain
2590
commands.
2591
.I Option
2592
can be
2593
.IR DynamicMenu ", " ModuleSynchronous ", " Read ", " Wait ", " * .
2594
An option must be followed by a boolean argument
2595
.IR bool .
2596
You can use commas to separate individual options.  If you set an
2597
option to "True", then when the corresponding command is run, fvwm
2598
displays the cursor of the
2599
.I WAIT
2600
context of the
2601
.B CursorStyle
2602
command.  "False" forces to not display the cursor.  The default is:
2603
.EX
2604
BusyCursor DynamicMenu False, \\
2605
  ModuleSynchronous False, Read False, \\
2606
  Recapture True, Wait False
2607
.EE
2608
The option
2609
.I *
2610
refers to all available options.
2611
2612
The
2613
.I Read
2614
option also controls the
2615
.B PipeRead
2616
command.
2617
2618
The
2619
.I DynamicMenu
2620
option affects the
2621
.I DynamicPopupAction
2622
and
2623
.I MissingSubmenuFunction
2624
options of the
2625
.B AddToMenu
2626
command.  If this option is set to "False", then the busy cursor
2627
is not displayed during a dynamic menu command even if this
2628
command is a
2629
.BR Read " or " PipeRead
2630
command and the
2631
.I Read
2632
option is set to "True".
2633
2634
The
2635
.I Wait
2636
option affects only the root cursor.  During a wait pause the root
2637
cursor is replaced by the busy cursor and fvwm is still fully
2638
functional (you can escape from the pause, see the
2639
.B EscapeFunc
2640
command).  If you want to use this option and if you do not use
2641
the default root cursor, you must set your root cursor with the
2642
.B CursorStyle
2643
command.
2644
2645
.TP
2646
.BI "ClickTime [" delay "]"
2647
Specifies the maximum delay in milliseconds between a button press
2648
and a button release for the
2649
.B Function
2650
built-in to consider the action a mouse click.  The default delay
2651
is 150 milliseconds.  Omitting the delay value resets the
2652
.B ClickTime
2653
to the default.
2654
2655
.TP
2656
.BI "ColorLimit " limit
2657
Specifies a
2658
.I limit
2659
on the colors used in  pixmaps used  by fvwm. Zero (the default)
2660
sets no limit.  Fvwm uses pixmaps for icons, mini-icons, and
2661
pixmap borders, menu backgrounds and titles. This command limits
2662
pixmap colors to a set of colors that starts out with common
2663
colors.  The current list contains about 60 colors and starts with
2664
white, black, grey, green, blue, red, cyan, yellow, and magenta.
2665
The command
2666
.EX
2667
ColorLimit 9
2668
.EE
2669
would limit pixmaps to these 9 colors.
2670
2671
It makes the most sense to put this command at the front of the
2672
.I .fvwm2rc
2673
file.  This command should occur before any menu definitions that
2674
contain mini-icons.
2675
2676
Solid frame and title colors (including shadows and gradients) are
2677
not controlled by this command.
2678
2679
This command only makes sense on screens that display a limited
2680
number of colors at once.  If your  display can display more than
2681
2 million colors at once, this command is ignored.  Screens that
2682
only display 256 colors at once are known as 8 bit displays. The 2
2683
million color cutoff point corresponds to 21 bit color, the most
2684
common screen that exceeds this limit would be 24 bit.
2685
2686
On 8 bit displays, the default color limit is set to the size of
2687
the built in table (about 60).  We recommend that you start with
2688
the default value, and not include this command in your
2689
.IR .fvwm2rc .
2690
2691
.TP
2692
.BI "ColormapFocus " FollowsMouse | FollowsFocus
2693
By default, fvwm installs the colormap of the window that the
2694
cursor is in.  If you use
2695
.EX
2696
ColormapFocus FollowsFocus
2697
.EE
2698
then the installed colormap is the one for the window that
2699
currently has the keyboard focus.
2700
2701
.IP "\fBCursorStyle\fP \fIcontext\fP \fB[\fP \fInumber\fP \
2702
\fB|\fP \fIname\fP \
2703
\fB|\fP \fIxpm\fP \
2704
\fB|\fP \fINone\fP \
2705
\fB|\fP \fITiny\fP \
2706
\fB[\fP \fIfore back\fP \
2707
\fB]]\fP"
2708
Defines a new cursor for the specified context.  The various
2709
contexts are:
2710
2711
.in +.5i
2712
.BR "POSITION " (top_left_corner)
2713
.in +.3i
2714
used when initially placing windows
2715
.in -.3i
2716
2717
.BR "TITLE " (top_left_arrow)
2718
.in +.3i
2719
used in a window title-bar
2720
.in -.3i
2721
2722
.BR "DEFAULT " (top_left_arrow)
2723
.in +.3i
2724
used in windows that don't set their cursor
2725
.in -.3i
2726
2727
.BR "SYS " (hand2)
2728
.in +.3i
2729
used in one of the title-bar buttons
2730
.in -.3i
2731
2732
.BR "MOVE " (fleur)
2733
.in +.3i
2734
used when moving or resizing windows
2735
.in -.3i
2736
2737
.BR "RESIZE " (sizing)
2738
.in +.3i
2739
used when moving or resizing windows
2740
.in -.3i
2741
2742
.BR "WAIT " (watch)
2743
.in +.3i
2744
used during certain fvwm commands (see
2745
.B BusyCursor
2746
for details).
2747
.in -.3i
2748
2749
.BR "MENU " (top_left_arrow)
2750
.in +.3i
2751
used in menus
2752
.in -.3i
2753
2754
.BR "SELECT " (crosshair)
2755
.in +.3i
2756
used when the user is required to select a window
2757
.in -.3i
2758
2759
.BR "DESTROY " (pirate)
2760
.in +.3i
2761
used for DESTROY, CLOSE, and DELETE built-ins
2762
.in -.3i
2763
2764
.BR "TOP " (top_side)
2765
.in +.3i
2766
used in the top side-bar of a window
2767
.in -.3i
2768
2769
.BR "RIGHT " (right_side)
2770
.in +.3i
2771
used in the right side-bar of a window
2772
.in -.3i
2773
2774
.BR "BOTTOM " (bottom_side)
2775
.in +.3i
2776
used in the bottom side-bar of a window
2777
.in -.3i
2778
2779
.BR "LEFT " (left_side)
2780
.in +.3i
2781
used in the left side-bar of a window
2782
.in -.3i
2783
2784
.BR "TOP_LEFT " (top_left_corner)
2785
.in +.3i
2786
used in the top left corner of a window
2787
.in -.3i
2788
2789
.BR "TOP_RIGHT " (top_right_corner)
2790
.in +.3i
2791
used in the top right corner of a window
2792
.in -.3i
2793
2794
.BR "BOTTOM_LEFT " (bottom_left_corner)
2795
.in +.3i
2796
used in the bottom left corner of a window
2797
.in -.3i
2798
2799
.BR "BOTTOM_RIGHT " (bottom_right_corner)
2800
.in +.3i
2801
used in the bottom right corner of a window
2802
.in -.3i
2803
2804
.BR "TOP_EDGE " (top_side)
2805
.in +.3i
2806
used at the top edge of the screen.
2807
.in -.3i
2808
2809
.BR "RIGHT_EDGE " (right_side)
2810
.in +.3i
2811
used at the right edge of the screen.
2812
.in -.3i
2813
2814
.BR "BOTTOM_EDGE " (bottom_side)
2815
.in +.3i
2816
used at the bottom edge of the screen.
2817
.in -.3i
2818
2819
.BR "LEFT_EDGE " (left_side)
2820
.in +.3i
2821
used at the left edge of the screen.
2822
.in -.3i
2823
2824
.BR "ROOT " (left_ptr)
2825
.in +.3i
2826
used as the root cursor.
2827
.in -.3i
2828
2829
.BR "STROKE " (plus)
2830
.in +.3i
2831
used during a
2832
.B StrokeFunc
2833
command.
2834
.in -.3i
2835
.in -.5i
2836
2837
The defaults are shown in parentheses above.  If you ever want to
2838
restore the default cursor for a specific context you can omit the
2839
second argument.
2840
2841
The second is either the numeric value of the cursor as defined in
2842
the include file
2843
.I X11/cursorfont.h
2844
or its name (without the XC_ prefix) or the name of an xpm file
2845
containing a pixmap of depth 1 with a mask and an optional
2846
hot-spot (if no hot-spot is defined, the hot-spot is placed in the
2847
center of the image).  Furthermore the name can be
2848
.I None
2849
(no cursor) or
2850
.I Tiny
2851
(a single pixel as the cursor).  For example:
2852
.EX
2853
# make the kill cursor be XC_gumby (both forms work):
2854
CursorStyle DESTROY 56
2855
CursorStyle DESTROY gumby
2856
2857
CursorStyle TOP_LEFT topl.xpm
2858
CursorStyle ROOT hand1 yellow black
2859
.EE
2860
The optional
2861
.IR fg " and " bg
2862
arguments specify the foreground and background colors for the
2863
cursor, defaulting to black and white.
2864
2865
.TP
2866
.BI "DefaultColors [" "foreground background" "]"
2867
.B DefaultColors
2868
sets the default foreground and background colors used in
2869
miscellaneous windows created by fvwm, for example in the geometry
2870
feedback windows during a move or resize operation. If you don't
2871
want to change one color or the other, use - as its color name.
2872
To revert to the builtin default colors omit both color names.
2873
Note that the default colors are not used in menus, window titles
2874
or icon titles.
2875
2876
.TP
2877
.BI "DefaultColorset [" num "]"
2878
.B DefaultColorset
2879
sets the colorset used by the windows controlled by the
2880
.B DefaultColors
2881
command.  To revert back to the
2882
.B DefaultColors
2883
colors use
2884
.EX
2885
DefaultColorset -1
2886
.EE
2887
or any variant of the
2888
.B DefaultColors
2889
command.
2890
2891
.TP
2892
.BI "DefaultFont [" fontname "]"
2893
.B DefaultFont
2894
sets the default font to font
2895
.IR fontname .
2896
The default font is used by fvwm whenever no other font has been
2897
specified.  To reset the default font to the built in default,
2898
omit the argument.  The default font is used for menus, window
2899
titles, icon titles as well as the geometry feedback windows
2900
during a move or resize operation.  To override the default font
2901
in a specific context, use the
2902
.BR "Style * Font" ", " "Style * IconFont" ", or " MenuStyle
2903
commands.
2904
2905
.TP
2906
.BI "DefaultIcon " filename
2907
sets the default icon which is used if a window has neither an
2908
client-supplied icon nor an icon supplied via the
2909
.I Icon
2910
option of the
2911
.B Style
2912
command.
2913
2914
.TP
2915
.BI "DefaultLayers " "bottom put top"
2916
changes the layers that are used for the
2917
.IR StaysOnBottom ", " StaysPut ", " StaysOnTop
2918
.B Style
2919
options.  Initially, the layers 2, 4 and 6 are used.
2920
2921
.TP
2922
.BI "Emulate " Fvwm | Mwm | Win
2923
This command affects how miscellaneous things are done by
2924
fvwm. For example where the move/resize feedback window appears
2925
depends on this command.  To have more Mwm- or Win-like behavior
2926
you can call
2927
.BI Emulate
2928
with
2929
.IR Mwm " or " Win
2930
as its argument.  With
2931
.I Mwm
2932
resize and move feedback windows are in the center of the screen,
2933
instead of the upper left corner.
2934
2935
.TP
2936
.BI "EscapeFunc"
2937
By default the key sequence
2938
.SM Ctrl-Alt-Escape
2939
allows to escape from a
2940
.B Wait
2941
pause and from a locked
2942
.B ModuleSynchronous
2943
command.  The
2944
.B EscapeFunc
2945
command used with the
2946
.B Key
2947
command allows to configure this key sequence.  An example:
2948
.EX
2949
Key Escape A MC -
2950
Key Escape A  S EscapeFunc
2951
.EE
2952
replaces the
2953
.SM Ctrl-Alt-Escape
2954
key sequence with
2955
.SM Shift-Escape
2956
for aborting a
2957
.B Wait
2958
pause and
2959
.B ModuleSynchronous
2960
command.
2961
.B EscapeFunc
2962
used outside the
2963
.B Key
2964
command does nothing.
2965
2966
.TP
2967
.BI "FakeClick [" "command value" "] ..."
2968
This command is mainly intended for debugging fvwm and no
2969
guarantees are made that it works for you.
2970
.B FakeClick
2971
can simulate mouse button press and release events and pass them
2972
to fvwm or the applications.  The parameters are a list of
2973
commands which consist of pairs of
2974
.I command
2975
tokens and integer
2976
.I values,
2977
The
2978
.IR press " and " release
2979
commands are followed by the appropriate mouse button number and
2980
generate a button press or release event on the window below the
2981
pointer.  The
2982
.I wait
2983
commands pauses fvwm for the given number of milliseconds.  The
2984
.I modifiers
2985
command simulates pressing or releasing modifier keys.  The values
2986
1 to 5 are mapped to
2987
.SM Mod1
2988
to
2989
.SM Mod5
2990
while 6, 7 and 8 are mapped to
2991
.SM Shift,
2992
.SM Lock
2993
and
2994
.SM Control.
2995
The modifier is set for any further button events.  To release a
2996
modifier key, use the corresponding negative number.  The
2997
.I depth
2998
command determines to which window the button events are sent.
2999
With a depth of 1, all events go to the root window, regardless of
3000
the pointer's position.  With 2, the event is passed to the top
3001
level window under the pointer which is usually the frame window.
3002
With 3, events go to the client window. Higher numbers go to
3003
successive sub windows.  Zero (0) goes to the smallest window that
3004
contains the pointer. Note that events propagate upward.
3005
.EX
3006
 FakeClick depth 2 press 1 wait 250 release 1
3007
.EE
3008
This simulates a click with button 1 in the parent window (depth
3009
2) with a delay of 250 milliseconds between the press and the
3010
release.
3011
3012
.TP
3013
.BI "GlobalOpts [" options "]"
3014
As announced in the past, this command has been removed.  Please
3015
replace the global options in your configuration file according to
3016
the following table:
3017
.EX
3018
GlobalOpts WindowShadeShrinks
3019
  -->
3020
Style * WindowShadeShrinks
3021
3022
GlobalOpts WindowShadeScrolls
3023
  -->
3024
Style * WindowShadeScrolls
3025
3026
GlobalOpts SmartPlacementIsReallySmart
3027
  -->
3028
Style * MinOverlapPlacement
3029
3030
GlobalOpts SmartPlacementIsNormal
3031
  -->
3032
Style * TileCascadePlacement
3033
3034
GlobalOpts ClickToFocusDoesntPassClick
3035
  -->
3036
Style * ClickToFocusPassesClickOff
3037
3038
GlobalOpts ClickToFocusPassesClick
3039
  -->
3040
Style * ClickToFocusPassesClick
3041
3042
GlobalOpts ClickToFocusDoesntRaise
3043
  -->
3044
Style * ClickToFocusRaisesOff
3045
3046
GlobalOpts ClickToFocusRaises
3047
  -->
3048
Style * ClickToFocusRaises
3049
3050
GlobalOpts MouseFocusClickDoesntRaise
3051
  -->
3052
Style * MouseFocusClickRaisesOff
3053
3054
GlobalOpts MouseFocusClickRaises
3055
  -->
3056
Style * MouseFocusClickRaises
3057
3058
GlobalOpts NoStipledTitles
3059
  -->
3060
Style * StippledTitleOff
3061
3062
GlobalOpts StipledTitles
3063
  -->
3064
Style * StippledTitle
3065
3066
GlobalOpts CaptureHonorsStartsOnPage
3067
  -->
3068
Style * CaptureHonorsStartsOnPage
3069
3070
GlobalOpts CaptureIgnoresStartsOnPage
3071
  -->
3072
Style * CaptureIgnoresStartsOnPage
3073
3074
GlobalOpts RecaptureHonorsStartsOnPage
3075
  -->
3076
Style * RecaptureHonorsStartsOnPage
3077
3078
GlobalOpts RecaptureIgnoresStartsOnPage
3079
  -->
3080
Style * RecaptureIgnoresStartsOnPage
3081
3082
GlobalOpts ActivePlacementHonorsStartsOnPage
3083
  -->
3084
Style * ManualPlacementHonorsStartsOnPage
3085
3086
GlobalOpts ActivePlacementIgnoresStartsOnPage
3087
  -->
3088
Style * ManualPlacementIgnoresStartsOnPage
3089
3090
GlobalOpts RaiseOverNativeWindows
3091
  -->
3092
BugOpts RaiseOverNativeWindows on
3093
3094
GlobalOpts IgnoreNativeWindows
3095
  -->
3096
BugOpts RaiseOverNativeWindows off
3097
3098
.EE
3099
3100
.TP
3101
.BI "HilightColor " "textcolor backgroundcolor"
3102
This command is obsoleted by the
3103
.B Style
3104
options
3105
.IR HilightFore " and " HilightBack .
3106
Please use
3107
.EX
3108
Style * HilightFore textcolor, \\
3109
        HilightBack backgroundcolor
3110
.EE
3111
instead.
3112
3113
.TP
3114
.BI "HilightColorset [" num "]"
3115
This command is obsoleted by the
3116
.B Style
3117
option
3118
.IR HilightColorset .
3119
Please use
3120
.EX
3121
Style * HilightColorset num
3122
.EE
3123
instead.
3124
3125
.TP
3126
.BI "IconFont [" fontname "]"
3127
This command is obsoleted by the
3128
.B Style
3129
option
3130
.IR IconFont .
3131
Please use
3132
.EX
3133
Style * IconFont fontname
3134
.EE
3135
instead.
3136
3137
.TP
3138
.BI "IconPath " path
3139
This command is obsolete.  Please use
3140
.B ImagePath
3141
instead.
3142
3143
.TP
3144
.BI "ImagePath " path
3145
Specifies a colon separated list of directories in which to search
3146
for images (both monochrome and pixmap).  To find an image given
3147
by a relative pathname, fvwm looks into each directory listed in
3148
turn, and uses the first file found.
3149
3150
The
3151
.I path
3152
may contain environment variables such as
3153
.IR $HOME " (or " ${HOME} ).
3154
Further, a '+' in the
3155
.I path
3156
is expanded to the previous value of the path, allowing appending
3157
or prepending to the path easily.
3158
3159
For example:
3160
.EX
3161
ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
3162
.EE
3163
Note: if the
3164
.B FvwmM4
3165
module is used to parse your
3166
.I .fvwm2rc
3167
files, then m4 may want to mangle the word "include" which
3168
frequently shows up in the
3169
.B ImagePath
3170
command.  To fix this one may add
3171
.EX
3172
undefine(`include')
3173
.EE
3174
prior to the
3175
.B ImagePath
3176
command, or better: use the
3177
.I -m4-prefix
3178
option to force all
3179
.B m4
3180
directives to have a prefix of "m4_" (see the
3181
.B FvwmM4
3182
man page).
3183
3184
.TP
3185
.BI "PixmapPath " path
3186
This command is obsolete. Please use
3187
.B ImagePath
3188
instead.
3189
3190
.TP
3191
.BI "WindowFont [" fontname "]"
3192
This command is obsoleted by the
3193
.B Style
3194
option
3195
.IR Font .
3196
Please use
3197
.EX
3198
Style * Font fontname
3199
.EE
3200
instead.
3201
3202
.IP "\fBWindowList [(\fP \fIconditions\fP \
3203
\fB)] [\fP \fIposition\fP \
3204
\fB] [\fP \fIoptions\fP \
3205
\fB] [\fP \fIdouble-click-action\fP \
3206
\fB]\fP"
3207
Generates a pop-up menu (and pops it up) in which the title and
3208
geometry of each of the windows currently on the desktop are
3209
shown.
3210
3211
The format of the geometry part is:
3212
. IR desk "(" layer "): " "x-geometry sticky" ,
3213
where
3214
.IR desk " and " layer
3215
are the corresponding numbers and
3216
.I sticky
3217
is empty or a capital S.  The geometry of iconified windows is
3218
shown in parentheses.  Selecting an item from the window list
3219
pop-up menu causes the interpreted function "WindowListFunc" to be
3220
run with the window id of that window passed in as $0. The default
3221
"WindowListFunc" looks like this:
3222
.EX
3223
AddToFunc WindowListFunc
3224
 + I WindowId $0 Iconify off
3225
 + I WindowId $0 FlipFocus
3226
 + I WindowId $0 Raise
3227
 + I WindowId $0 WarpToWindow 5p 5p
3228
.EE
3229
You can destroy the builtin "WindowListFunc" and create your own
3230
if these defaults do not suit you.
3231
3232
The window list menu uses the "WindowList" menu style if it is
3233
defined (see
3234
.B MenuStyle
3235
command).  Otherwise the default menu style is used.  To switch
3236
back to the default menu style, issue the command
3237
.EX
3238
DestroyMenuStyle WindowList
3239
.EE
3240
Example:
3241
.EX
3242
MenuStyle WindowList SelectOnRelease Meta_L
3243
.EE
3244
The
3245
.I conditions
3246
can be used to exclude certain windows from the window
3247
list. Please refer to the
3248
.B Current
3249
command for details.  Only windows that match the given conditions
3250
are displayed in the window list.  The
3251
.I options
3252
below work vice versa: windows that would otherwise not be
3253
included in the window list can be selected with them.  The
3254
.I conditions
3255
always override the
3256
.IR options .
3257
3258
3259
The
3260
.I position
3261
arguments are the same as for
3262
.BR Menu .
3263
The command
3264
.I double-click-action
3265
is invoked if the user double-clicks (or hits the key rapidly
3266
twice if the menu is bound to a key) when bringing the window
3267
list.  The
3268
.I double-click-action
3269
must be quoted if it consists of more than one word.
3270
3271
The
3272
.I double-click-action
3273
is useful to define a default window if you have bound the window
3274
list to a key (or button) like this:
3275
.EX
3276
# Here we call an existing function, but it may be different
3277
AddToFunc SwitchToWindow
3278
+ I WindowListFunc $w
3279
3280
Key Tab A M WindowList "Prev SwitchToWindow"
3281
.EE
3282
Hitting
3283
.SM Alt-Tab
3284
once it brings up the window list, if you hit it twice the focus
3285
is flipped between the current and the last focused window.  With
3286
the proper
3287
.I SelectOnRelease
3288
menu style (see example above) a window is selected as soon as you
3289
release the
3290
.SM Alt
3291
key.
3292
3293
The
3294
.I options
3295
passed to WindowList can be
3296
.IR NoGeometry ,
3297
.IR NoGeometryWithInfo ,
3298
.IR "Function funcname" ,
3299
.IR "Desk desknum" ,
3300
.IR CurrentDesk ,
3301
.IR NoIcons " / " Icons " / " OnlyIcons ,
3302
.IR NoNormal " / " Normal " / " OnlyNormal ,
3303
.IR NoSticky " / " Sticky " / " OnlySticky ,
3304
.IR NoOnTop " / " OnTop " / " OnlyOnTop ,
3305
.IR NoOnBottom " / " OnBottom " / " OnlyOnBottom ,
3306
.IR "Layer m [n]" ,
3307
.IR UseListSkip " / " OnlyListSkip ,
3308
.IR NoDeskSort ,
3309
.IR ReverseOrder ,
3310
.IR UseIconName ,
3311
.IR Alphabetic " / " NotAlphabetic ,
3312
.IR NoHotkeys ,
3313
.IR SelectOnRelease .
3314
3315
(Note - normal means not iconic, sticky, or on top)
3316
3317
The
3318
.I SelectOnRelease
3319
option works exactly like the
3320
.B MenuStyle
3321
option with the same name, but overrides the option given in a
3322
menu style.  By default, this option is set to the left
3323
.SM Alt
3324
key.  To switch it off, use
3325
.I SelectOnRelease
3326
without a key name.
3327
3328
If you pass in a function via
3329
.IR "Function funcname" ,
3330
$0 is the window id:
3331
.EX
3332
AddToFunc IFunc I WindowId $0 Iconify toggle
3333
WindowList Function IFunc, NoSticky, \\
3334
  CurrentDesk, NoIcons
3335
.EE
3336
If you use the
3337
.IB "Layer m " [ "n" ]
3338
option, only windows in layers between m and n are displayed. n
3339
defaults to m.  With the
3340
.I ReverseOrder
3341
option the order of the windows in the list is reversed.
3342
3343
If you wanted to use the
3344
.B WindowList
3345
as an icon manager, you could invoke the following:
3346
.EX
3347
WindowList OnlyIcons, Sticky, OnTop, Geometry
3348
.EE
3349
(Note - the
3350
.I Only
3351
options essentially wipe out all other ones... but the
3352
.I OnlyListSkip
3353
option which just causes
3354
.B WindowList
3355
to only consider the windows with
3356
.I WindowListSkip
3357
style.)
3358
3359
.TP
3360
.BI "+"
3361
Used to continue adding to the last specified decor, function or
3362
menu. See the discussion for
3363
.BR AddToDecor ", " AddToFunc ", and " AddToMenu .
3364
3365
3366
.SS COMMANDS AFFECTING WINDOW MOVEMENT AND PLACEMENT
3367
3368
.TP
3369
.BI "AnimatedMove " "x y" " [" Warp "]"
3370
Move a window in an animated fashion.  Similar to
3371
.B Move
3372
command below. The options are the same, except they are required,
3373
since it doesn't make sense to have a user move the window
3374
interactively and animatedly.  If the optional argument
3375
.I Warp
3376
is specified the pointer is warped with the window.
3377
3378
.TP
3379
.BI "HideGeometryWindow [" Never | Move | Resize "]"
3380
Hides the position or size window that is usually shown when a
3381
window is moved or resized interactively.  To switch it off only
3382
for move or resize operations the optional parameters
3383
.IR Move " and " Resize
3384
can be used respectively.  To switch both on again use the
3385
.I Never
3386
option.
3387
3388
.TP
3389
.BI "Layer [" "arg1 arg2" "] | [" default "]"
3390
Puts the current window in a new layer.  If
3391
.I arg1
3392
is non zero then the next layer is the current layer number plus
3393
.IR arg1 .
3394
If
3395
.I arg1
3396
is zero then the new layer is
3397
.IR arg2 .
3398
3399
As a special case,
3400
.I default
3401
puts the window in its default layer, i.e. the layer it was
3402
initially in.  The same happens if no or invalid arguments are
3403
specified.
3404
3405
.TP
3406
.BI "Lower"
3407
Allows the user to lower a window.  Note that this lowers a window
3408
only in its layer.  To bring a window to the absolute bottom, use
3409
.EX
3410
AddToFunc lower-to-bottom
3411
 + I Layer 0 0
3412
 + I Lower
3413
.EE
3414
3415
.IP "\fBMove [[\fP \fIw\fP \
3416
\fB|\fP \fIm\fP \
3417
\fB]\fP \fIx\fP \
3418
\fB[\fP \fIp\fP \
3419
\fB] [\fP \fIw\fP \
3420
\fB|\fP \fIm\fP \
3421
\fB]\fP \fIy\fP \
3422
\fB[\fP \fIp\fP \
3423
\fB] [\fP \fIWarp\fP \
3424
\fB]] | [\fP \fIpointer\fP \
3425
\fB]\fP"
3426
Allows the user to move a window.  If called from somewhere in a
3427
window or its border, then that window is moved.  If called from
3428
the root window then the user is allowed to select the target
3429
window.  If the optional argument
3430
.I Warp
3431
is specified the pointer is warped with the window.  If the single
3432
argument
3433
.I pointer
3434
is given, the top left corner of the window window is moved to the
3435
pointer position before starting the operation; this is mainly
3436
intended for internal use by modules like
3437
.BR FvwmPager .
3438
3439
The operation can be aborted with Escape or by pressing mouse
3440
button 2. Pressing button 3 sets the
3441
.I PlacedByButton3
3442
condition (see
3443
.B Current
3444
command).
3445
3446
If the optional arguments
3447
.IR x " and " y
3448
are provided, then the window is moved immediately without user
3449
interaction.  Each argument can specify an absolute or relative
3450
position from either the left/top or right/bottom of the screen.
3451
By default, the numeric value given is interpreted as a percentage
3452
of the screen width/height, but a trailing
3453
.RI ' p '
3454
changes the interpretation to mean pixels.  To move the window
3455
relative to its current position, add the
3456
.RI ' w '
3457
(for "window") prefix before the
3458
. IR x " and/or " y
3459
value.  To move the window to a position relative to the current
3460
location of the pointer, add the
3461
.RI ' m '
3462
(for "mouse") prefix.  To leave either coordinate unchanged,
3463
"keep" can be specified in place of
3464
.IR x " or " y .
3465
3466
Simple Examples:
3467
.EX
3468
# Interactive move
3469
Mouse 1 T A Move
3470
# Move window so top left is at (10%,10%)
3471
Mouse 2 T A Move 10 10
3472
# Move top left to (10pixels,10pixels)
3473
Mouse 3 T A Move 10p 10p
3474
.EE
3475
More complex examples (these can be bound as actions to
3476
keystrokes, etc.; only the command is shown, though):
3477
.EX
3478
# Move window so bottom right is at bottom
3479
# right of screen
3480
Move -0 -0
3481
3482
# Move window 5% to the right, and to the
3483
# middle vertically
3484
Move w+5 50
3485
3486
# Move window up 10 pixels, and so left edge
3487
# is at x=40 pixels
3488
Move 40p w-10p
3489
3490
# Move window to the mouse pointer location
3491
#
3492
Move m+0 m+0
3493
.EE
3494
See also the
3495
.B AnimatedMove
3496
command above.
3497
3498
.TP
3499
.BI "MoveToDesk " prev " | " arg1 " [" arg2 "] [" "min max" "]"
3500
Moves the selected window to another desktop.  The arguments are
3501
the same as for the
3502
.B GotoDesk
3503
command.
3504
.B MoveToDesk
3505
is a replacement for the old
3506
.B WindowsDesk
3507
command, which can no longer be used.
3508
3509
.TP
3510
.BI "MoveThreshold [" pixels "]"
3511
When the user presses a mouse button upon an object fvwm waits to
3512
see if the action is a click or a drag.  If the mouse moves by
3513
more than
3514
.I pixels
3515
pixels it is assumed to be a drag.
3516
3517
Previous versions of fvwm hardwired
3518
.I pixels
3519
to 3, which is now the default value.  If
3520
.I pixels
3521
is negative or omitted the default value (which might be increased
3522
when 16000x9000 pixel displays become affordable) is restored.
3523
3524
.IP "\fBMoveToPage [\fP \fIx\fP \
3525
\fB[\fP \fIp\fP \
3526
\fB]\fP \fIy\fP \
3527
\fB[\fP \fIp\fP \
3528
\fB]] | [\fIprev\fP \
3529
\fB]\fP"
3530
Moves the selected window to another page (x,y).  The upper left
3531
page is (0,0), the upper right is (M,0), where M is one less than
3532
the current number of horizontal pages specified in the
3533
.B DeskTopSize
3534
command.  Similarly the lower left page is (0,N), and the lower
3535
right page is (M,N).  Negative page numbers refer to pages from
3536
the rightmost/lowest page.  If
3537
.IR x " and " y
3538
are not given, the window is moved to the current page (a window
3539
that has the focus but is off-screen can be retrieved with this).
3540
Moving windows to a page relative to the current one can be
3541
achieved by adding a trailing
3542
.RI ' p '
3543
after any or both numerical arguments.  To move a window to the
3544
previous page use
3545
.I prev
3546
as the single argument.  Using MoveToPage on a sticky window makes
3547
the window non-sticky (see
3548
.B Stick
3549
command).
3550
3551
Examples:
3552
.EX
3553
# Move window to page (2,3)
3554
MoveToPage 2 3
3555
3556
# Move window to lowest and rightmost page
3557
MoveToPage -1 -1
3558
3559
# Move window to last page visited
3560
MoveToPage prev
3561
3562
# Move window two pages to the right and one
3563
# page up
3564
MoveToPage +2p -1p
3565
.EE
3566
3567
.TP
3568
.BI "MoveToScreen [ " screen " ]"
3569
Moves the selected window to another Xinerama screen.  The
3570
.I screen
3571
argument can be 'p' for the primary screen, 'c' for the current
3572
screen (containing the mouse pointer), 'g' for the global screen
3573
or the screen number itself (counting from zero).
3574
3575
.TP
3576
.BI "OpaqueMoveSize [" percentage "]"
3577
Tells fvwm the maximum size window with which opaque window
3578
movement should be used.  The percentage is percent of the total
3579
screen area (may be greater than 100).  With
3580
.EX
3581
OpaqueMoveSize 0
3582
.EE
3583
all windows are moved using the traditional rubber-band
3584
outline. With
3585
.EX
3586
OpaqueMoveSize unlimited
3587
.EE
3588
or if a negative percentage is given
3589
all windows are moved as solid windows.  The default is
3590
.EX
3591
OpaqueMoveSize 5
3592
.EE
3593
which allows small windows to be moved in an opaque manner but
3594
large windows are moved as rubber-bands.  If
3595
.I percentage
3596
is omitted or invalid the default value is set.  To resize windows
3597
in an opaque manner you can use the
3598
.I ResizeOpaque
3599
style.  See
3600
.B Style
3601
command.
3602
3603
.TP
3604
.BI "PlaceAgain [" Anim "]"
3605
Causes the current window's position to be re-computed using the
3606
initial window placement logic.  The window is moved to where it
3607
would have been if it were a new window that had just appeared.
3608
Most useful with
3609
.IR Smart " or " Clever " (" ReallySmart ")"
3610
placement.  If the optional argument
3611
.I Anim
3612
is specified, an animated move is used to place the window in its
3613
new position.
3614
3615
.TP
3616
.BI "Raise"
3617
Allows the user to raise a window. Note that this raises a window
3618
only in its layer. To bring a window to the absolute top, use
3619
.EX
3620
AddToFunc raise-to-top
3621
 + I Layer 0 ontop
3622
 + I Raise
3623
.EE
3624
where ontop is the highest layer used in your setup.
3625
3626
.TP
3627
.BI "RaiseLower"
3628
Alternately raises and lowers a window.  The window is raised if
3629
it is obscured by any window (except for its own transients when
3630
.I RaiseTransient
3631
style is used; see
3632
.B Style
3633
command) otherwise it is lowered.
3634
3635
.IP "\fBResize [\fP \fIwidth\fP \
3636
\fB[\fP \fIp\fP \
3637
\fB|\fP \fIc\fP \
3638
\fB]\fP \fIheight\fP \
3639
\fB[\fP \fIp\fP \
3640
\fB|\fP \fIc\fP \
3641
\fB]] | [\fP \fIbottomright\fP \
3642
\fB|\fP \fIbr x y\fP \
3643
\fB]\fP"
3644
Allows to resize a window.  If called from somewhere in a window
3645
or its border, then that window is resized.  If called from the
3646
root window then the user is allowed to select the target window.
3647
3648
The operation can be aborted with Escape or by pressing any mouse
3649
button (except button 1 which confirms it).
3650
3651
If the optional arguments
3652
.IR width " and " height
3653
are provided, then the window is resized so that its dimensions
3654
are
3655
.IR width " by " height .
3656
The units of
3657
.IR width " and " height
3658
are percent-of-screen, unless a letter
3659
.RI ' p '
3660
is appended to one or both coordinates, in which case the location
3661
is specified in pixels.  With a
3662
.RI ' c '
3663
suffix the unit defined by the client application (hence the c) is
3664
used.  So you can say
3665
.EX
3666
Resize 80c 24c
3667
.EE
3668
to make a terminal window just big enough for 80x24
3669
characters. Both,
3670
.IR width " and " height
3671
can be negative.  In this case the new size is the screen size
3672
minus the given value.  If either value is "keep", the
3673
corresponding dimension of the window is left untouched.
3674
3675
An alternate syntax is used if the keyword
3676
.IR bottomright " or in short " br
3677
follows the command name.  In this case, the arguments
3678
.IR x " and " y
3679
specify the desired position of the bottom right corner of the
3680
window.  They are interpreted exactly like the
3681
.IR x " and " y
3682
arguments of the
3683
.B Move
3684
command.
3685
3686
.TP
3687
.BI "ResizeMove " "resize-arguments move-arguments"
3688
This command does the same as the
3689
.BR Resize " and " Move
3690
commands, but in a single call which is less visually
3691
disturbing. The
3692
.I resize-arguments
3693
are exactly the same arguments as for the
3694
.B Resize
3695
command and the
3696
.I move-arguments
3697
are exactly the same arguments as for the
3698
.B Move
3699
command except the
3700
.I pointer
3701
option which is not supported by the
3702
.B ResizeMove
3703
command.
3704
3705
Example:
3706
.EX
3707
# Move the window to the top left corner
3708
ResizeMove w+0 -10p 0 -20p
3709
.EE
3710
3711
.TP
3712
.BI "SetAnimation " milliseconds-delay " [" fractions-to-move-list "]"
3713
Sets the time between frames and the list of fractional offsets to
3714
customize the animated moves of the
3715
.B AnimatedMove
3716
command and the animation of menus (if the menu style is set to
3717
animated; see
3718
.B MenuStyle
3719
command).  If the
3720
.I fractions-to-move-list
3721
is omitted, only the time between frames is altered.  The
3722
.I fractions-to-move-list
3723
specifies how far the window should be offset at each successive
3724
frame as a fraction of the difference between the starting
3725
location and the ending location.  e.g.:
3726
.EX
3727
SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \\
3728
  .45 .6 .75 .85 .90 .94 .97 .99 1.0
3729
.EE
3730
Sets the delay between frames to 10 milliseconds, and sets the
3731
positions of the 16 frames of the animation motion.  Negative
3732
values are allowed, and in particular can be used to make the
3733
motion appear more cartoonish, by briefly moving slightly in the
3734
opposite direction of the main motion.  The above settings are the
3735
default.
3736
3737
.IP "\fBSnapAttraction [\fP \fIproximity\fP \
3738
\fB[\fP \fIbehavior\fP \
3739
\fB] [\fP \fIScreen\fP \
3740
\fB]]\fP"
3741
If during an interactive move the window or icon comes within
3742
.I proximity
3743
pixels of another the window or icon, it is moved to make the
3744
borders adjoin.  The default of 0 means that no snapping happens.
3745
Calling this command without arguments turns off snap attraction
3746
and restores the default behavior.  Please refer also to the
3747
.B SnapGrid
3748
command.
3749
3750
The
3751
.I behavior
3752
argument is optional and may be set to one of the four following
3753
values:  With
3754
.I All
3755
both icons and windows snap to other windows and other icons.
3756
.I SameType
3757
lets snap windows only to other windows and icons only to other
3758
icons. With
3759
.I Windows
3760
windows snap only to other windows.  Icons do not snap. Similarly
3761
with
3762
.I Icons
3763
icons snap to only other icons and windows do not snap.
3764
3765
If the
3766
.I behavior
3767
option is not given, the snapping behavior is not changed.  The
3768
default behavior is
3769
.IR All .
3770
3771
If the
3772
.I Screen
3773
option is present windows and or icons are snapped to the screen
3774
edges too.
3775
3776
.TP
3777
.BI "SnapGrid [" "x-grid-size y-grid-size" "]"
3778
During an interactive move a window or icon is positioned such
3779
that its location (top left corner) is coincident with the nearest
3780
grid point. The default
3781
.IR x-grid-size " and " y-grid-size
3782
setting are both 1, which is effectively no grid all.  An
3783
interactive move with both
3784
.BR SnapGrid " and " SnapAttraction
3785
results in the window being moved to be adjacent to the nearest
3786
window border (if within snap proximity) or grid position.  In
3787
other words, the window moves the shortest distance possible to
3788
satisfy both
3789
.BR SnapGrid " and " SnapAttraction .
3790
Note that the x and y coordinates are not coupled.  For example, a
3791
window may snap to another window on the x axis while snapping to
3792
a grid point on the y axis.  Calling this command without
3793
arguments reinstates the default settings.
3794
3795
.TP
3796
.BI "WindowsDesk " arg1 " [" arg2 "]"
3797
Moves the selected window to another desktop.
3798
3799
This command has been removed and must be replaced by
3800
.BR MoveToDesk ,
3801
the arguments for which are the same as for the
3802
.B GotoDesk
3803
command.
3804
.B Important note:
3805
You cannot simply change the name of the command: the syntax has
3806
changed.  If you used
3807
.EX
3808
WindowsDesk n
3809
.EE
3810
to move a window to desk n, you have to change it to
3811
.EX
3812
MoveToDesk 0 n
3813
.EE
3814
3815
.TP
3816
.BI "XorPixmap [" pixmap "]"
3817
Selects the pixmap with which bits are xor'ed when doing
3818
rubber-band window moving or resizing.  This has a better chance
3819
of making the rubber-band visible if
3820
.B XorValue
3821
does not give good results.  An example pixmap
3822
.I resize.rainbow.xpm
3823
is provided with the icon distribution.  To turn the
3824
.B XorPixmap
3825
off again use the
3826
.B XorValue
3827
command or omit the
3828
.I pixmap
3829
argument.
3830
3831
.TP
3832
.BI "XorValue [" number "]"
3833
Changes the value with which bits are xor'ed when doing
3834
rubber-band window moving or resizing.  Setting this value is a
3835
trial-and-error process.  The default value 0 tries to find a
3836
value that gives a good contrast to black and white.  It is set if
3837
the given
3838
.I number
3839
is omitted or invalid.
3840
3841
3842
.SS COMMANDS FOR FOCUS AND MOUSE MOVEMENT
3843
3844
.TP
3845
.BI "CursorMove " horizontal "[" p "] " vertical "[" p "]"
3846
Moves the mouse pointer by
3847
.I horizontal
3848
pages in the X direction and
3849
.I vertical
3850
pages in the Y direction.  Either or both entries may be
3851
negative. Both horizontal and vertical values are expressed in
3852
percent of pages, so
3853
.EX
3854
CursorMove 100 100
3855
.EE
3856
means to move down and right by one full page.
3857
.EX
3858
CursorMove 50 25
3859
.EE
3860
means to move right half a page and down a quarter of a
3861
page. Alternatively, the distance can be specified in pixels by
3862
appending a
3863
.RI ' p '
3864
to the horizontal and/or vertical specification.  For example
3865
.EX
3866
CursorMove -10p -10p
3867
.EE
3868
means move ten pixels up and ten pixels left.  The CursorMove
3869
function should not be called from pop-up menus.
3870
3871
.TP
3872
.BI "FlipFocus  [" NoWarp "]"
3873
Executes a
3874
.B Focus
3875
command as if the user had used the pointer to select the
3876
window. This command alters the order of the WindowList in the
3877
same way as clicking in a window to focus, i.e. the target window
3878
is removed from the
3879
.B WindowList
3880
and placed at the start. This command is recommended for use with
3881
the
3882
.B Direction
3883
command and in the function invoked from
3884
.BR WindowList .
3885
3886
.TP
3887
.BI "Focus  [" NoWarp "]"
3888
Sets the keyboard focus to the selected window.  If the
3889
.I NoWarp
3890
argument is given, this is all it does.  Otherwise it also moves
3891
the viewport or window as needed to make the selected window
3892
visible. This command does not automatically raise the
3893
window. Does not warp the pointer into the selected window (see
3894
.B WarpToWindow
3895
function).  Does not de-iconify.  This command does not alter the
3896
order of the
3897
.BR WindowList ,
3898
it rotates the
3899
.B WindowList
3900
around so that the target window is at the start.
3901
3902
When the
3903
.I NoWarp
3904
argument is given, Focus cannot transfer the keyboard focus to
3905
windows on other desks.
3906
3907
To raise and/or warp a pointer to a window together with
3908
.BR Focus " or " FlipFocus ,
3909
use a function, like:
3910
.EX
3911
AddToFunc SelectWindow
3912
+ I Focus
3913
+ I Iconify false
3914
+ I Raise
3915
+ I WarpToWindow 50 8p
3916
.EE
3917
3918
.TP
3919
.BI "WarpToWindow " x "[" p "] " y "[" p "]"
3920
Warps the cursor to the associated window.  The parameters
3921
.IR x " and " y
3922
default to percentage of window down and in from the upper left
3923
hand corner (or number of pixels down and in if
3924
.RI ' p '
3925
is appended to the numbers).  If a number is negative the opposite
3926
edge is used and the direction reversed.  This command works also
3927
with windows that are not managed by fvwm.  In this case fvwm does
3928
not bring the window onto the screen if it is not visible.  For
3929
example it is possible to warp the pointer to the center of the
3930
root window on screen 1:
3931
.EX
3932
WindowId root 1 WarpToWindow 50 50
3933
.EE
3934
3935
3936
.SS COMMANDS CONTROLLING WINDOW STATE
3937
3938
.TP
3939
.BI "Close"
3940
If the window accepts the delete window protocol a message is sent
3941
to the window asking it to gracefully remove itself.  If the
3942
window does not understand the delete window protocol then the
3943
window is destroyed as with the
3944
.B Destroy
3945
command.  Note: if the window accepts the delete window protocol
3946
but does not close itself in response, the window is not deleted.
3947
3948
.TP
3949
.BI "Delete"
3950
Sends a message to a window asking that it remove itself,
3951
frequently causing the application to exit.
3952
3953
.TP
3954
.BI "Destroy"
3955
Destroys an application window, which usually causes the
3956
application to crash and burn.
3957
3958
.TP
3959
.BI "Iconify [" bool "]"
3960
Iconifies a window if it is not already iconified or de-iconifies
3961
it if it is already iconified.  The optional argument
3962
.I bool
3963
is a boolean argument.  "True" means only iconification is
3964
allowed, while "False" forces de-iconification.  Using "toggle"
3965
switches between iconified and de-iconified states.
3966
3967
There are a number of
3968
.B Style
3969
options which influence the appearance and behavior of icons (e.g.
3970
.IR StickyIcon ", " NoIcon ).
3971
3972
For backwards compatibility, the optional argument may also be a
3973
positive number instead of "True", or a negative number instead of
3974
"False".  Note that this syntax is obsolete, and will be removed
3975
in the future.
3976
3977
.IP "\fBMaximize [\fP\fIscreen screen-spec\fP\fB] \
3978
[\fP\fIbool\fP\fB] \
3979
[\fP\fIhorizontal\fP\fB[\fP\fIp\fP\fB]\fP \
3980
\fIvertical\fP\fB[\fP\fIp\fP\fB]]\fP"
3981
Without its optional arguments (or if the
3982
.I bool
3983
bit has the value "toggle")
3984
.B Maximize
3985
causes the window to alternately switch from a full-screen size to
3986
its normal size.  To force a window into maximized (normal) state
3987
you can use a "True" or "False" value for the
3988
.I bool
3989
argument.
3990
3991
With the optional arguments
3992
.IR horizontal " and " vertical ,
3993
which are expressed as percentage of a full screen, the user can
3994
control the new size of the window.  An optional suffix
3995
.RI ' p '
3996
can be used to indicate pixels instead of percents of the screen
3997
size.  If horizontal is greater than 0 then the horizontal
3998
dimension of the window is set to
3999
.IR horizontal *screen_width/100.
4000
If the value is smaller than 0 the size is subtracted from the
4001
screen width, i.e. -25 is the same as 75.  If
4002
.I horizontal
4003
is "grow", it is maximized to current available space until
4004
finding any obstacle.  The vertical resizing is similar.  If both
4005
horizontal and vertical values are "grow", it expands vertically
4006
first, then horizontally to find space.  Instead of the horizontal
4007
"grow" argument, "growleft" or "growright" can be used
4008
respectively "growup" and "growdown".  For example, the following
4009
adds a title-bar button to switch a window to the full vertical
4010
size of the screen:
4011
.EX
4012
Mouse 0 4 A Maximize 0 100
4013
.EE
4014
The following causes windows to be stretched to the full width:
4015
.EX
4016
Mouse 0 4 A Maximize 100 0
4017
.EE
4018
This makes a window that is half the screen size in each
4019
direction:
4020
.EX
4021
Mouse 0 4 A Maximize 50 50
4022
.EE
4023
To expand a window horizontally until any other window is found:
4024
.EX
4025
Mouse 0 4 A Maximize 0 grow
4026
.EE
4027
To expand a window but leave the lower 60 pixels of the screen
4028
unoccupied
4029
.EX
4030
Mouse 0 4 A Maximize 100 -60p
4031
.EE
4032
Values larger than 100 can be used with caution.
4033
4034
If the first argument is the word
4035
.IR screen ,
4036
the
4037
.I screen-spec
4038
argument specifies the Xinerama screen on which to operate.
4039
It can be 'p' for the primary screen, 'c' for the current
4040
screen (containing the mouse pointer), 'g' for the global screen
4041
or the screen number itself (counting from zero).  This option is
4042
only useful with multiple Xinerama screens.
4043
4044
.TP
4045
.BI "Recapture"
4046
Causes fvwm to recapture all of its windows.  This ensures that
4047
the latest style parameters are used.  The recapture operation is
4048
visually disturbing.
4049
4050
Since fvwm version 2.4 only a very few
4051
.B Style
4052
options need a
4053
.B Recapture
4054
to take effect (e.g.
4055
.IR UseStyle ).
4056
4057
.TP
4058
.BI "RecaptureWindow"
4059
Causes fvwm to recapture the chosen window.  See
4060
.B Recapture
4061
command above.
4062
4063
.TP
4064
.BI "Refresh"
4065
Causes all windows on the screen to redraw themselves. All pending
4066
updates of all windows' styles and looks are applied immediately.
4067
E.g. if
4068
.BR Style " or " TitleStyle
4069
commands were issued inside a fvwm function.
4070
4071
.TP
4072
.BI "RefreshWindow"
4073
Causes the chosen window to redraw itself. All pending updates of
4074
the window's style and looks are applied immediately.  E.g. if
4075
.BR Style " or " TitleStyle
4076
commands were issued inside a fvwm function.
4077
4078
.TP
4079
.BI "Stick [" bool "]"
4080
If the
4081
.I bool
4082
argument is empty or "toggle", the
4083
.B Stick
4084
command makes a window sticky if it is not already sticky, or
4085
non-sticky if it is already sticky.  To make a window sticky
4086
regardless of its current state the
4087
.I bool
4088
argument must be "True".  To make it non-sticky use "False".
4089
4090
.TP
4091
.BI "WindowShade [" bool "]"
4092
Toggles the window shade feature for titled windows.  Windows in
4093
the shaded state only display a title-bar.  If
4094
.I bool
4095
is not given or "toggle", the window shade state is toggled.  If
4096
.I bool
4097
is "True", the window is forced to the shaded state. If
4098
.I bool
4099
is "False", then the window is forced to the non-shaded
4100
state. Windows without titles can be shaded too.  See also
4101
.I WindowShadeSteps
4102
option of the
4103
.B Style
4104
command.
4105
4106
For backwards compatibility, the optional argument may also be 1
4107
to signify "on", and 2 to signify "off". Note that this syntax is
4108
obsolete, and will be removed in the future.
4109
4110
.TP
4111
.BI "WindowShadeAnimate  [" steps "[" p "]]"
4112
This command is obsolete.  Please use the
4113
.I WindowShadeSteps
4114
option of the
4115
.B Style
4116
command instead.
4117
4118
4119
.SS COMMANDS FOR MOUSE, KEY AND STROKE BINDINGS
4120
4121
.TP
4122
.BI "IgnoreModifiers [" Modifiers "]"
4123
Tells fvwm which modifiers to ignore when matching Mouse or Key
4124
bindings.
4125
.B IgnoreModifiers
4126
affects the
4127
.I ClickToFocus
4128
style too.  This command belongs into your
4129
.IR .fvwm2rc .
4130
If you issue it when your fvwm session is already up and running
4131
the results are unpredictable.  The should appear before any
4132
applications or modules are started in your
4133
.I .fvwm2rc
4134
file (e.g. with the
4135
.B Exec
4136
command).
4137
4138
.I Modifiers
4139
has the same syntax as in the
4140
.BR Mouse " or " Key
4141
bindings, with the addition of 'L' meaning the
4142
.SM caps lock
4143
key.  The default is "L".
4144
.I Modifiers
4145
can be omitted, meaning no modifiers are ignored.  This command
4146
comes in handy if the
4147
.SM num-lock
4148
and
4149
.SM scroll-lock
4150
keys interfere with your shortcuts.  With XFree86 '2' usually is
4151
the
4152
.SM num-lock
4153
modifier and '5' refers to the
4154
.SM scroll-lock
4155
key. To turn all these pesky modifiers off you can use this
4156
command:
4157
.EX
4158
IgnoreModifiers L25
4159
.EE
4160
.I Important Note:
4161
This command creates a lot of extra network traffic, depending on
4162
your CPU, network connection, the number of
4163
.BR Key " or " Mouse
4164
commands in your configuration file and the number of modifiers you
4165
want to ignore.  If you do not have a lightning fast machine or
4166
very few bindings you should not ignore more than two modifiers.
4167
I.e. do not ignore
4168
.SM scroll-lock
4169
if you have no problem with it.  In the
4170
.I FAQ
4171
you can find a better solution of this problem.
4172
4173
.TP
4174
.BI "GnomeButton"
4175
Used in conjunction with
4176
.B Mouse
4177
to pass mouse button presses on the root window to a
4178
.SM GNOME
4179
program (such as GMC).  The following example passes presses of
4180
mouse buttons 1 and 3 to such a program.
4181
.EX
4182
Mouse 1 R A GnomeButton
4183
Mouse 3 R A GnomeButton
4184
.EE
4185
4186
.TP
4187
.BI "Key " "Keyname Context Modifiers Function"
4188
Binds a keyboard key to a specified fvwm built-in function, or
4189
removes the binding if
4190
.I Function
4191
is '-'.  The syntax is the same as for a
4192
.B Mouse
4193
binding except that the mouse button number is replaced with a
4194
.IR Keyname .
4195
The
4196
.I Keyname
4197
is one of the entries from
4198
.IR /usr/include/X11/keysymdef.h ,
4199
with the leading XK_ omitted.  The
4200
.IR Context " and " Modifiers
4201
fields are defined as in the
4202
.B Mouse
4203
binding.  However, when you press a key the context window is the
4204
window that has the keyboard focus.  That is not necessarily the
4205
same as the window the pointer is over (with
4206
.IR SloppyFocus " or " ClickToFocus ).
4207
Note that key bindings with the 'R' (root window) context do not
4208
work properly with
4209
.IR SloppyFocus " and " ClickToFocus .
4210
If you encounter problems, use the
4211
.B PointerKey
4212
command instead.  If you want to bind keys to a window with
4213
.IR SloppyFocus " or " ClickToFocus
4214
that are supposed to work when the pointer is not over the window,
4215
fvwm assumes the pointer is over the client window (i.e. you have
4216
to use the 'W' modifier).
4217
4218
The following example binds the built in window list to pop up
4219
when
4220
.SM Alt-Ctrl-Shift-F11
4221
is hit, no matter where the mouse pointer is:
4222
.EX
4223
Key F11 A SCM WindowList
4224
.EE
4225
Binding a key to a title-bar button causes that button to appear.
4226
Please refer to the
4227
.B Mouse
4228
command for details.
4229
4230
.TP
4231
.BI "Mouse " "Button Context Modifiers Function"
4232
Defines a mouse binding, or removes the binding if
4233
.I Function
4234
is '-'.
4235
.I Button
4236
is the mouse button number.  If
4237
.I Button
4238
is zero then any button performs the specified function.
4239
.I Context
4240
describes where the binding applies.  Valid contexts are 'R' for
4241
the root window, 'W' for an application window, 'T' for a window
4242
title-bar, 'S' for a window side, top, or bottom bar, 'F' for a
4243
window frame (the corners), 'I' for an Icon window, or '0' through
4244
'9' for title-bar buttons, or any combination of these letters.
4245
'A' is for any context except for title-bar buttons.  For
4246
instance, a context of "FST" applies when the mouse is anywhere in
4247
a window's border except the title-bar buttons.  Only 'S' and 'W'
4248
are valid for an undecorated window.
4249
4250
.I Modifiers
4251
is any combination of 'N' for no modifiers, 'C' for control, 'S'
4252
for shift, 'M' for Meta, 'L' for Caps-Lock or 'A' for any
4253
modifier. For example, a modifier of "SM" applies when both the
4254
.SM Meta
4255
and
4256
.SM Shift
4257
keys are down.  X11 modifiers mod1 through mod5 are represented as
4258
the digits '1' through '5'.  The modifier 'L' is ignored by
4259
default.  To turn it on, use the
4260
.B IgnoreModifiers
4261
command.
4262
4263
.I Function
4264
is one of fvwm's built-in functions.
4265
4266
The title-bar buttons are numbered with odd numbered buttons on
4267
the left side of the title-bar and even numbers on the
4268
right. Smaller-numbered buttons are displayed toward the outside
4269
of the window while larger-numbered buttons appear toward the
4270
middle of the window (0 is short for 10).  In summary, the buttons
4271
are numbered:
4272
.EX
4273
1 3 5 7 9    0 8 6 4 2
4274
.EE
4275
The highest odd numbered button which has an action bound to it
4276
determines the number of buttons drawn on the left side of the
4277
title bar.  The highest even number determines the number or right
4278
side buttons which are drawn.  Actions can be bound to either
4279
mouse buttons or keyboard keys.
4280
4281
.TP
4282
.BI "PointerKey " "Keyname Context Modifiers Function"
4283
This command works exactly like the
4284
.B Key
4285
command.  The only difference is that the binding operates on the
4286
window under the pointer.  Normal key bindings operate on the
4287
focused window instead.  The
4288
.B PointerKey
4289
command can for example be used to bind keys to the root window if
4290
you are using
4291
.IR SloppyFocus " or " ClickToFocus .
4292
However, some applications (xterm is one example) are unable to
4293
handle this key anymore, even if the pointer is over the xterm
4294
window.  It is recommended to use the
4295
.B PointerKey
4296
command only for key combinations that are not needed in any
4297
application window.
4298
4299
Example:
4300
.EX
4301
Style * SloppyFocus
4302
PointerKey f1 a m Menu MainMenu
4303
.EE
4304
4305
.TP
4306
.BI "Stroke " "Sequence Button Context Modifiers Function"
4307
Binds a mouse stroke sequence to a specified fvwm built-in
4308
function, or removes the binding if
4309
.I Function
4310
is '-'.  The syntax is the same as for a
4311
.B Mouse
4312
binding except that
4313
.I Sequence
4314
is inserted in front of the button number and a value of 0 for
4315
.I Button
4316
concerns the
4317
.B StrokeFunc
4318
command.  The
4319
.IR Context " and " Modifiers
4320
fields are defined as in the
4321
.B Mouse
4322
binding.  However, only the 'R' Context really works (if you want
4323
to use other contexts you need to use the
4324
.B StrokeFunc
4325
below).
4326
4327
Strokes sequences are defined in a telephone grid like this:
4328
.EX
4329
 1  2  3
4330
4331
 4  5  6
4332
4333
 7  8  9
4334
.EE
4335
or in a numeric pad grid like this:
4336
.EX
4337
 7  8  9
4338
4339
 4  5  6
4340
4341
 1  2  3
4342
.EE
4343
The telephone grid is used by default, to use the numeric pad grid
4344
you should begin the sequence with a 'N'.  Note that a complex
4345
motion may gives several different sequences (see the "netscape"
4346
example below to handle such motion).  Moreover, sequence are
4347
limited to 20 elements (with the present version of
4348
.BR libstroke ),
4349
however, in practice it is preferable to use sequence with less
4350
than 12 elements.
4351
4352
Because of the default button menu in fvwm, you may need to remove
4353
a mouse button binding (using an empty action) before using the
4354
stroke
4355
.EX
4356
Mouse 3 R N
4357
.EE
4358
Also, you can still use the stroke "sequence 0" to simulate a
4359
click:
4360
.EX
4361
Stroke 0 3 R N Menu WindowList Nop
4362
.EE
4363
The following example starts xterm when the mouse drags an 'I' on
4364
the root window with button 3 pressed down:
4365
.EX
4366
Stroke 258  3  R  N  Exec exec xterm
4367
.EE
4368
An example for Netscape:
4369
.EX
4370
Stroke 7415963    3  R  N  Exec exec netscape
4371
Stroke 74148963   3  R  N  Exec exec netscape
4372
Stroke 74158963   3  R  N  Exec exec netscape
4373
Stroke 7418963    3  R  N  Exec exec netscape
4374
Stroke 415963     3  R  N  Exec exec netscape
4375
.EE
4376
You may prefer to use the numeric pad grid since you have such a
4377
grid on your machine. Here an example:
4378
.EX
4379
Stroke N78963314   3  R  N  FvwmForm FvwmForm-QuitVerify
4380
Stroke N789633147  3  R  N  FvwmForm FvwmForm-QuitVerify
4381
.EE
4382
This example starts the "QuitVerify" form if you draw a box that
4383
begins in the top left corner.
4384
4385
Note: You need
4386
.B libstroke
4387
installed and fvwm compiled with stroke support.
4388
.B libstroke
4389
can be obtained at
4390
.EX
4391
.B http://www.etla.net/~willey/projects/libstroke/
4392
.EE
4393
4394
.TP
4395
.BI "StrokeFunc [" Options "]"
4396
Causes fvwm to record a mouse stroke sequence and to execute the
4397
corresponding action as defined in a
4398
.B Stroke
4399
command.  The cursor is modified to the
4400
.I STROKE
4401
context of the
4402
.B CursorStyle
4403
command during recording.  When the stroke is finished
4404
.B StrokeFunc
4405
looks for a stroke binding of the form
4406
.EX
4407
Stroke sequence 0 Context Modifiers action
4408
.EE
4409
and executes the corresponding action (Note the 0).  Normal use of this
4410
function is via a
4411
.BR Mouse " or " Key
4412
command.  Examples:
4413
.EX
4414
Mouse 3 A M StrokeFunc
4415
Key x R N StrokeFunc
4416
.EE
4417
If you press mouse button 3 and
4418
.SM Alt
4419
anywhere (respectively, press the key x when the cursor is on the
4420
root window), then fvwm records the mouse motions until the mouse
4421
button 3 (respectively, the x key) is released and then check if
4422
the recorded
4423
.I sequence
4424
corresponds to a stroke binding of the form
4425
.EX
4426
.RI """Stroke " sequence " 0 A M " action """ \""
4427
.RI """Stroke " sequence " 0 R N " action """ \""
4428
.EE
4429
Note that the
4430
.IR Context " and " Modifiers
4431
are taken at the beginning of the execution of the
4432
.B StrokeFunc
4433
command (so you can release the modifiers before the end of the
4434
stroke recording in the case of a mouse binding and if you used,
4435
say, a title-bar context the mouse motion can go through an
4436
application window).  The keys
4437
.SM Escape
4438
and
4439
.SM Delete
4440
allow you to abort the command.
4441
4442
The
4443
.B StrokeFunc
4444
command has five options:
4445
.IR NotStayPressed ", " EchoSequence ", " DrawMotion ", " FeedBack " and " StrokeWidth.
4446
These options are disabled by default.
4447
.I EchoSequence
4448
causes fvwm to Echo the recorded stroke sequence.
4449
.I DrawMotion
4450
causes fvwm to draw the mouse motion on the screen.
4451
.I FeedBack
4452
causes fvwm to display during a fraction of second the cursor of the
4453
.I WAIT
4454
context of the
4455
.B CursorStyle
4456
command if the recorded stroke sequence corresponds to a stroke
4457
binding.
4458
.I StrokeWidth
4459
takes an integer argument, which must be  >= 0 and <= 100 and
4460
which defines the width of the line for the
4461
.I DrawMotion option.
4462
4463
.I NotStayPressed
4464
works only if
4465
.B StrokeFunc
4466
is used via a
4467
.BR Mouse
4468
or a
4469
.B Key
4470
command.  This option removes the need to have a button or the key
4471
pressed during the stroke, but you have to do a mouse click or
4472
press the
4473
.SM Return
4474
or
4475
.SM Space
4476
key to finish the mouse motion recording (these keys also work
4477
without the
4478
.I NotStayPressed
4479
option).
4480
4481
You can use the
4482
.B StrokeFunc
4483
"alone".  In this case it works as above with the
4484
.I NotStayPressed
4485
option enabled.  However,
4486
.I Modifiers,
4487
in general, may not work as expected (i.e., in this case use 'A'
4488
or 'N' as
4489
.I Modifiers
4490
in the stroke bindings).
4491
4492
Note that some computers do not support key release events. If
4493
that is the case the
4494
.B StrokeFunc
4495
used via a
4496
.B Key
4497
command works as if the
4498
.I NotStayPressed
4499
option is enabled.
4500
4501
4502
.SS THE STYLE COMMAND (CONTROLLING WINDOW STYLES)
4503
4504
.TP
4505
.BI "UpdateStyles"
4506
All pending updates of all windows' styles and looks are applied
4507
immediately.  E.g. if
4508
.BR Style " or " TitleStyle
4509
commands were issued inside a fvwm function.
4510
4511
.TP
4512
.BI "Style " "stylename options"
4513
This command is intended to replace the old fvwm 1.xx global
4514
commands NoBorder, NoTitle, StartsOnDesk, Sticky, StaysOnTop,
4515
Icon, WindowListSkip, CirculateSkip, SuppressIcons, BoundaryWidth,
4516
NoBoundaryWidth, StdForeColor, and StdBackColor with a single
4517
flexible and comprehensive window specific command.  This command
4518
is used to set attributes of a window to values other than the
4519
default or to set the window manager default styles.
4520
4521
.I stylename
4522
can be a window's name, class, or resource string.  It may contain
4523
the wildcards '*' and '?', which are matched in the usual Unix
4524
filename manner.  They are searched in the reverse order
4525
stated. When two conflicting styles apply to the same window, the
4526
style that was changed last wins.
4527
4528
Note: windows that have no name (WM_NAME) are given a name of
4529
"Untitled", and windows that don't have a class (WM_CLASS,
4530
res_class) are given class "NoClass" and those that don't have a
4531
resource (WM_CLASS, res_name) are given resource "NoResource".
4532
4533
.I options
4534
is a comma separated list containing one or more of the keywords
4535
.IR BorderWidth ", " HandleWidth ,
4536
.IR NoIcon " / " Icon ", " MiniIcon ,
4537
.IR IconBox ", " IconGrid ", " IconFill ,
4538
.IR NoTitle " / " Title ,
4539
.IR TitleAtBottom " / " TitleAtTop ,
4540
.IR StippledTitle " / " StippledTitleOff ,
4541
.IR NoHandles " / " Handles ,
4542
.IR WindowListSkip " / " WindowListHit ,
4543
.IR CirculateSkip " / " CirculateHit ,
4544
.IR CirculateSkipShaded " / " CirculateHitShaded ,
4545
.IR Layer ,
4546
.IR StaysOnTop " / " StaysOnBottom " / " StaysPut ,
4547
.IR Sticky " / " Slippery ,
4548
.IR StartIconic " / " StartNormal ,
4549
.IR Color ", " ForeColor ", " BackColor ", " Colorset ,
4550
.IR HilightFore ", " HilightBack ", " HilightColorset ,
4551
.IR BorderColorset ", " HilightBorderColorset ,
4552
.IR Font ,
4553
.IR IconFont ,
4554
.IR StartsOnDesk " / " StartsOnPage " / " StartsAnyWhere ,
4555
.IR StartsOnScreen ,
4556
.IR ManualPlacementHonorsStartsOnPage " / " ManualPlacementIgnoresStartsOnPage ,
4557
.IR CaptureHonorsStartsOnPage " / " CaptureIgnoresStartsOnPage ,
4558
.IR RecaptureHonorsStartsOnPage " / " RecaptureIgnoresStartsOnPage ,
4559
.IR StartsOnPageIncludesTransients " / " StartsOnPageIgnoresTransients ,
4560
.IR IconTitle " / " NoIconTitle ,
4561
.IR MwmButtons " / " FvwmButtons ,
4562
.IR MwmBorder " / " FvwmBorder ,
4563
.IR MwmDecor " / " NoDecorHint ,
4564
.IR MwmFunctions " / " NoFuncHint ,
4565
.IR HintOverride " / " NoOverride ,
4566
.IR NoButton " / " Button ,
4567
.IR ResizeHintOverride " / " NoResizeOverride ,
4568
.IR OLDecor " / " NoOLDecor ,
4569
.IR GNOMEUseHints " / " GNOMEIgnoreHints ,
4570
.IR StickyIcon " / " SlipperyIcon ,
4571
.IR ManualPlacement " / " CascadePlacement " / " MinOverlapPlacement " / "
4572
.IR MinOverlapPercentPlacement " / " TileManualPlacement " / "
4573
.IR TileCascadePlacement ,
4574
.IR DecorateTransient " / " NakedTransient ,
4575
.IR RaiseTransient " / " DontRaiseTransient ,
4576
.IR LowerTransient " / " DontLowerTransient ,
4577
.IR StackTransientParent " / " DontStackTransientParent ,
4578
.IR SkipMapping " / " ShowMapping ,
4579
.IR ScatterWindowGroups " / " KeepWindowGroupsOnDesk ,
4580
.IR UseDecor ,
4581
.IR UseStyle ,
4582
.IR NoPPosition " / " UsePPosition ,
4583
.IR NoUSPosition " / " UseUSPosition ,
4584
.IR NoTransientPPosition " / " UseTransientPPosition ,
4585
.IR NoTransientUSPosition " / " UseTransientUSPosition ,
4586
.IR UseIconPosition " / " NoIconPosition ,
4587
.IR Lenience " / " NoLenience ,
4588
.IR ClickToFocus " / " SloppyFocus " /"
4589
.IR MouseFocus | FocusFollowsMouse " / " NeverFocus ,
4590
.IR ClickToFocusPassesClickOff " / " ClickToFocusPassesClick ,
4591
.IR ClickToFocusRaisesOff " / " ClickToFocusRaises ,
4592
.IR MouseFocusClickRaises " / " MouseFocusClickRaisesOff ,
4593
.IR StartsLowered " / " StartsRaised ,
4594
.IR GrabFocus " / " GrabFocusOff ,
4595
.IR GrabFocusTransient " / " GrabFocusTransientOff ,
4596
.IR IgnoreRestack " / " AllowRestack ,
4597
.IR FixedPosition " / " VariablePosition ,
4598
.IR IconOverride " / " NoIconOverride " / " NoActiveIconOverride ,
4599
.IR DepressableBorder " / " FirmBorder ,
4600
.IR MaxWindowSize ,
4601
.IR IconifyWindowGroups " / " IconifyWindowGroupsOff ,
4602
.IR ResizeOpaque " / " ResizeOutline ,
4603
.IR BackingStore " / " BackingStoreOff ,
4604
.IR Opacity " / " ParentalRelativity ,
4605
.IR SaveUnder " / " SaveUnderOff ,
4606
.IR WindowShadeShrinks " / " WindowShadeScrolls ,
4607
.IR WindowShadeSteps.
4608
4609
.\" +++++++++++++++ general notes
4610
In the above list some options are listed as
4611
style-option/opposite-style-option.  The opposite-style-option for
4612
entries that have them describes the fvwm default behavior and can
4613
be used if you want to change the fvwm default behavior.
4614
4615
.\" +++++++++++++++ focus policy
4616
.TP
4617
.B Focus policy
4618
.I ClickToFocus
4619
instructs fvwm to give the focus to the window when it is clicked
4620
in.  The default
4621
.I MouseFocus
4622
(or its alias
4623
.IR FocusFollowsMouse )
4624
tells fvwm to give the window the focus as soon as the pointer
4625
enters the window, and take it away when the pointer leaves the
4626
window.
4627
.I SloppyFocus
4628
is similar, but doesn't give up the focus if the pointer leaves
4629
the window to pass over the root window or a ClickToFocus window
4630
(unless you click on it, that is), which makes it possible to move
4631
the mouse out of the way without losing focus.  A window with the
4632
style
4633
.I NeverFocus
4634
never receives the focus.  This is useful for modules like
4635
.BR FvwmButtons ,
4636
for example.
4637
4638
The focus model can be augmented with several additional options.
4639
.IR ClickToFocusPassesClickOff " and " ClickToFocusPassesClick
4640
controls if a mouse click to focus a window using the
4641
.I ClickToFocus
4642
model is sent to the application or not.  Similarly,
4643
.IR ClickToFocusRaisesOff " and " ClickToFocusRaises
4644
control if the window is raised, while
4645
.IR MouseFocusClickRaises " and " MouseFocusClickRaisesOff
4646
are equivalent but apply only to windows using
4647
.IR SloppyFocus ", " MouseFocus " and " NeverFocus .
4648
The defaults are
4649
.IR ClickToFocusPassesClick ,
4650
.IR ClickToFocusRaises " and " MouseFocusClickRaisesOff .
4651
4652
.I GrabFocus
4653
causes a newly mapped window to grab the focus, while
4654
.I GrabFocusOff
4655
turns this off.
4656
.I GrabFocus
4657
is the default for
4658
.I ClickToFocus
4659
windows and
4660
.I GrabFocusOff
4661
is the default for
4662
.IR MouseFocus " and " SloppyFocus
4663
windows.  Note that this option is switched back to the default
4664
every time you change the focus policy.  You have to use it after
4665
the initial
4666
.IR ClickToFocus / MouseFocus / SloppyFocus .
4667
This style does not apply to transient windows.  The
4668
.IR GrabFocusTransient " and " GrabFocusTransientOff
4669
styles are responsible for this behavior.  By default,
4670
.I GrabFocusTransient
4671
is turned on.
4672
4673
.I Lenience
4674
instructs fvwm to ignore the convention in the
4675
.SM ICCCM
4676
which states that if an application sets the input field of the
4677
wm_hints structure to False, then it never wants the window
4678
manager to give it the input focus.  The only application that we
4679
know of which needs this is sxpm, and that is a silly bug with a
4680
trivial fix and has no overall effect on the program anyway.
4681
Rumor is that some older applications have problems too.
4682
4683
.\" +++++++++++++++ styles affecting the window title
4684
.TP
4685
.B Window title
4686
The
4687
.IR Title " and " NoTitle
4688
options determine if the window has a title-bar or not.  By
4689
default all windows have a title-bar.
4690
4691
Windows with the
4692
.I TitleAtBottom
4693
style have a title-bar below the window instead of above as
4694
usual. The
4695
.I TitleAtTop
4696
style restores the default placement.  Even if the window has the
4697
.I NoTitle
4698
style set, this affects the
4699
.I WindowShade
4700
command.
4701
4702
With the
4703
.I StippledTitle
4704
style, are drawn with the same effect that is usually reserved for
4705
windows with the
4706
.I Sticky
4707
style.
4708
.I StippledTitleOff
4709
reverts back to normal titles.
4710
4711
.I Color
4712
takes two arguments.  The first is the window-label text color and
4713
the second is the window decoration's normal background color. The
4714
two colors are separated with a slash.  If the use of a slash
4715
causes problems then the separate
4716
.IR ForeColor " and " BackColor
4717
options can be used.
4718
4719
.I Colorset
4720
takes the colorset number as its sole argument and overrides the
4721
colors set by
4722
.IR Color .
4723
Instead, the corresponding colors from the given colorset are
4724
used.  Note that all other features of a colorset are unsupported
4725
yet. To stop using the colorset, the colorset number can be
4726
omitted.
4727
4728
The
4729
.IR HilightFore ", " HilightBack " and " HilightColorset
4730
style options work exactly like
4731
.IR ForeColor ", " BackColor " and " Colorset
4732
but are used only if the window has the focus.  These styles
4733
replace the old commands
4734
.BR HilightColor " and " HilightColorset .
4735
4736
.IR BorderColorset
4737
takes the colorset number as its sole argument and overrides the
4738
colors set by
4739
.IR Color " or " Colorset .
4740
for the window border.  To stop using a colorset, the argument can
4741
be omitted.
4742
4743
The
4744
.IR HilightBorderColorset
4745
style option works similarly to
4746
.IR BorderColorset
4747
but is used when the window has the focus.
4748
4749
The
4750
.IR Font " and " IconFont
4751
options take the name of a font as their sole argument. This font
4752
is used in the window or icon title.  By default the font given in
4753
the
4754
.B DefaultFont
4755
command is used.  To revert back to the default, use the style
4756
without the name argument.  These styles replace the older
4757
.BR WindowFont " and " IconFont
4758
commands.
4759
4760
.\" +++++++++++++++ styles affecting title buttons
4761
.TP
4762
.B Title buttons
4763
.IR Button " and " NoButton
4764
take a numeric argument which is the number of the title-bar
4765
button which is to be included/omitted.
4766
4767
.I MwmButtons
4768
makes the
4769
.B Maximize
4770
button look pressed-in when the window is maximized.  See the
4771
.I MwmDecorMax
4772
flag in
4773
.B ButtonStyle
4774
for more information.  To switch this style off again, use the
4775
.I FvwmButtons
4776
style.
4777
4778
.\" +++++++++++++++ styles affecting borders
4779
.TP
4780
.B Borders
4781
.I MwmBorder
4782
makes the 3-D bevel more closely match Mwm's.
4783
.I FvwmBorder
4784
turns off the previous option.
4785
4786
.I HandleWidth
4787
takes a numeric argument which is the width of the border to place
4788
the window if it does have resize-handles.
4789
4790
.I BorderWidth
4791
takes a numeric argument which is the width of the border to place
4792
the window if it does not have resize-handles.
4793
4794
.I DepressableBorder
4795
makes the border parts of the window decoration look sunken in
4796
when a button is pressed over them.  This can be disabled again
4797
with the
4798
.I FirmBorder
4799
style.
4800
4801
.\" +++++++++++++++ icons, shading, maximizing, movement, resizing
4802
.TP
4803
.B Icons, shading, maximizing, movement, resizing
4804
.I Icon
4805
takes an (optional) unquoted string argument which is the icon
4806
bitmap or pixmap to use.  Icons specified this way override pixmap
4807
icons, but not icon windows, provided by the client in the
4808
application (with the WM_HINTS property).  The
4809
.I IconOverride
4810
style changes the behavior to override any client-provided icons;
4811
the
4812
.I NoIconOverride
4813
style changes the behavior to not override any client-provided
4814
icons; the default overriding behavior can be activated with the
4815
.I NoActiveIconOverride
4816
style.  With this style, fvwm uses application provided icons if
4817
the icon is changed but uses the icon provided in the
4818
configuration file until then.
4819
4820
There is one exception to these rules, namely
4821
.EX
4822
Style * Icon unknown.xpm
4823
.EE
4824
doesn't force the unknown.xpm icon on every window, it just sets
4825
the default icon like the DefaultIcon command. If you really want
4826
all windows to have the same icon, you can use
4827
.EX
4828
Style ** Icon unknown.xpm
4829
.EE
4830
If the
4831
.I NoIcon
4832
attribute is set then the specified window simply disappears when
4833
it is iconified.  The window can be recovered through the
4834
window-list.  If
4835
.I Icon
4836
is set without an argument then the
4837
.I NoIcon
4838
attribute is cleared but no icon is specified.  An example which
4839
allows only the
4840
.B FvwmPager
4841
module icon to exist:
4842
.EX
4843
Style * NoIcon
4844
Style FvwmPager Icon
4845
.EE
4846
4847
.I IconBox
4848
takes no argument, four numeric arguments (plus optionally a
4849
screen specification), an X11 geometry string or the string
4850
"none":
4851
.EX
4852
.RI IconBox " [" "screen scr-spec" "] " "l t r b"
4853
.EE
4854
or
4855
.EX
4856
IconBox geometry
4857
.EE
4858
Where
4859
.I l
4860
is the left coordinate,
4861
.I t
4862
is the top,
4863
.I r
4864
is right and
4865
.I b
4866
is bottom.  Negative coordinates indicate distance from the right
4867
or bottom of the screen.
4868
If the first argument is the word
4869
.IR screen ,
4870
the
4871
.I scr-spec
4872
argument specifies the Xinerama screen on which the IconBox is
4873
defined.  It can be the usual screen Xinerama specification, 'p',
4874
'c', 'g', a screen number or the additional 'w' for the screen
4875
where the window center is located.  This is only useful with
4876
multiple Xinerama screens.  Perhaps easier to use is an X11
4877
geometry string:
4878
.EX
4879
IconBox -80x200-1-1
4880
.EE
4881
Which would place an 80 by 240 pixel icon box in the lower right
4882
hand corner of the screen.  The icon box is a region of the screen
4883
where fvwm attempts to put icons for any matching window, as long
4884
as they do not overlap other icons. Multiple icon boxes can be
4885
defined as overflow areas.  When the first icon box is full, the
4886
second one is filled.  All the icon boxes for one style must be
4887
defined in one
4888
.B Style
4889
command.  For example:
4890
.EX
4891
Style * IconBox -80x200-1-1, \\
4892
        IconBox 1000x70-1-1
4893
.EE
4894
A Style command with the IconBox option replaces any icon box
4895
previously defined for the same style.  Thats why the backslash in
4896
the previous example is required.
4897
4898
Note: The geometry for the icon box command takes the additional
4899
screen specifier "@w" in case a Xinerama setup is used.  This
4900
designates the screen where the window center is located.  The
4901
additional screen specifier is not allowed anywhere else.
4902
4903
If you never define an icon box, or you fill all the icon boxes,
4904
fvwm has a default icon box that covers the screen, it fills top
4905
to bottom, then left to right, and has an 80x80 pixel grid.  To
4906
disable all but the default icon box you can use IconBox without
4907
arguments in a separate
4908
.B Style
4909
command.  To disable all icon boxes including the default icon
4910
box, the argument "none" can be specified.
4911
4912
Hint: You can auto arrange your icons in the icon box with a
4913
simple fvwm function.  Put the "DeiconifyAndRearrange" function
4914
below in your configuration file:
4915
.EX
4916
AddToFunc DeiconifyAndRearrange
4917
 + C Iconify off
4918
 + C All (CurrentPage Iconic) RecaptureWindow
4919
.EE
4920
And then replace all places where you call the
4921
.B Iconify
4922
builtin function to de-iconify an icon with a call to the new
4923
function.  For example replace
4924
.EX
4925
AddToFunc IconFunc
4926
 + C Iconify off
4927
 + M Raise
4928
 + M Move
4929
 + D Iconify off
4930
4931
Mouse 1 I A Iconify off
4932
.EE
4933
with
4934
.EX
4935
AddToFunc IconFunc
4936
 + C DeiconifyAndRearrange
4937
 + M Raise
4938
 + M Move
4939
 + D DeiconifyAndRearrange
4940
4941
Mouse 1 I A DeiconifyAndRearrange
4942
.EE
4943
.I IconGrid
4944
takes 2 numeric arguments greater than zero.
4945
.EX
4946
.I IconGrid x y
4947
.EE
4948
Icons are placed in an icon box by stepping through the icon box
4949
using the
4950
.IR x " and " y
4951
values for the icon grid, looking for a free space. The default
4952
grid is 3 by 3 pixels which gives a tightly packed appearance. To
4953
get a more regular appearance use a grid larger than your largest
4954
icon. Currently there is no way to clip an icon to a maximum
4955
size. An
4956
.I IconGrid
4957
definition must follow the
4958
.B IconBox
4959
definition that it applies to:
4960
.EX
4961
Style * IconBox -80x240-1-1, IconGrid 90 90
4962
.EE
4963
.I IconFill
4964
takes 2 arguments.
4965
.EX
4966
.RI "IconFill " "Bottom Right"
4967
.EE
4968
Icons are placed in an icon box by stepping through the icon box
4969
using these arguments to control the direction the box is filled
4970
in. By default the direction is left to right, then top to bottom.
4971
This would be expressed as:
4972
.EX
4973
IconFill left top
4974
.EE
4975
To fill an icon box in columns instead of rows, specify the
4976
vertical direction (top or bottom) first. The directions can be
4977
abbreviated or spelled out as follows: "t", "top", "b", "bot",
4978
"bottom", "l", "lft", "left", "r", "rgt", "right". An
4979
.B IconFill
4980
definition must follow the
4981
.B IconBox
4982
definition that it applies to:
4983
.EX
4984
Style * IconBox -80x240-1-1, IconFill b r
4985
.EE
4986
.I MiniIcon
4987
specifies a pixmap to use as the miniature icon for the
4988
window. This miniature icon can be drawn in a title-bar button
4989
(see
4990
.BR ButtonStyle ),
4991
and can be used by various fvwm modules
4992
.RB ( FvwmWinList ", " FvwmIconMan " and " FvwmTaskBar ).
4993
It takes the name of a pixmap as an argument.
4994
4995
.I WindowShadeShrinks " and " WindowShadeScrolls
4996
control if the contents of a window that is being shaded with the
4997
.B WindowShade
4998
command are scrolled (default) or if they stay in place.
4999
5000
The
5001
.I WindowShadeSteps
5002
option selects the number of steps for animation when shading a
5003
window with
5004
.BR WindowShade .
5005
It takes one number as its argument.  If the number has a trailing
5006
.RI ' p '
5007
it sets the number of pixels to use as the step size instead of
5008
a fixed number of steps.  0 disables the animation.  This happens
5009
too if the argument is omitted or invalid.
5010
5011
.I ResizeOpaque
5012
instructs fvwm to resize the corresponding windows with their
5013
contents visible instead of using an outline.  Since this causes
5014
the application to redraw frequently it can be quite slow and make
5015
the window flicker excessively, depending on the amount of
5016
graphics the application redraws.  The
5017
.I ResizeOutline
5018
style (default) negates the
5019
.I ResizeOpaque
5020
style.  Many applications do not like their windows being resized
5021
opaque, e.g. XEmacs, Netscape or terminals with a pixmap
5022
background. If you do not like the result, don't use the
5023
.I ResizeOpaque
5024
style for these windows.  To exempt certain windows from opaque
5025
resizing you could use these lines in your configuration file:
5026
.EX
5027
Style * ResizeOpaque
5028
Style rxvt ResizeOutline
5029
Style emacs ResizeOutline
5030
.EE
5031
.I Sticky
5032
makes the window sticky, i.e. it is always visible on each page
5033
and each desk.  The opposite style,
5034
.I Slippery
5035
reverts back to the default.
5036
5037
.I StickyIcon
5038
makes the window sticky when its iconified.  It de-iconifies on
5039
top the active desktop.
5040
.I SlipperIcon
5041
reverts back to the default.
5042
5043
.I IgnoreRestack
5044
makes fvwm ignore attempts of clients to raise or lower their own
5045
windows.  By default, the opposite style,
5046
.I AllowRestack
5047
is active.
5048
5049
.I FixedPosition
5050
makes fvwm ignore attempts of the user to move the window.  To
5051
allow user movement of windows, use the
5052
.I VariablePosition
5053
style.
5054
5055
.I ResizeHintOverride
5056
instructs fvwm to ignore the program supplied minimum and maximum
5057
size.  This can be handy for broken applications that refuse to be
5058
resized.  Don't use it if you don't need it.  The default
5059
(opposite) style is
5060
.I NoResizeOverride.
5061
5062
.I MaxWindowSize " [ width [ p ]  height [ p ] ]"
5063
Tells fvwm the maximum width and height of a window.  The values
5064
are the percentage of the total screen area.  If the letter
5065
.RI ' p '
5066
is appended to either of the values, the numbers are interpreted
5067
as pixels. This command is useful to force large application
5068
windows to be fully visible.  Neither
5069
.IR height " or " width
5070
may be less than 100 pixels.  If you omit the parameters or their
5071
values are invalid, both limits are set to 32767 pixels (which is
5072
the default).
5073
5074
With
5075
.I IconifyWindowGroups
5076
all windows in the same window group are iconified at once when
5077
group leader is iconified.  The default is
5078
.IR IconifyWindowGroupsOff ,
5079
which disables this behaviour.  Although a number of applications
5080
use the window group hint, it is rarely used in a proper way, so
5081
it is probably best to use
5082
.I IconifyWindowGroups
5083
only for selected applications.
5084
5085
.\" +++++++++++++++ Window Manager placement
5086
.TP
5087
.B Window Manager placement
5088
Applications can place windows at a particular spot on the screen
5089
either by window manager hints or a geometry specification.  When
5090
they do neither, then the window manager steps in to find a place
5091
for the window.  Fvwm knows six ways to deal with this
5092
situation. The default is
5093
.IR TileCascadePlacement .
5094
5095
.I CascadePlacement
5096
automatically place new windows in a cascading fashion.
5097
5098
.I TileCascadePlacement
5099
automatically places new windows in a smart location - a location
5100
in which they do not overlap any other windows on the screen.  If
5101
no such position can be found
5102
.IR CascadePlacement
5103
is used as a fall-back method.
5104
5105
.I TileManualPlacement
5106
This is the same as
5107
.IR TileCascadePlacement ,
5108
but uses
5109
.IR ManualPlacement
5110
as the fall-back method.
5111
5112
.I MinOverlapPlacement
5113
automatically places new windows in a location in which the
5114
overlapping area in pixels of other windows is minimal.  This
5115
placement policy especially tries to avoid overlapping icons and
5116
windows on higher layers.
5117
5118
.I MinOverlapPercentPlacement
5119
is similar to
5120
.IR MinOverlapPlacement
5121
but tries to minimize the overlapped percentages of other windows
5122
instead of the overlapped area in pixels.  This placement policy
5123
tries to avoid covering other windows completely and tries even
5124
harder not to cover small windows.
5125
5126
.I ManualPlacement
5127
(aka active placement). The user is required to place every new
5128
window manually.  The window only shows as a rubber band until a
5129
place is selected manually. The window is placed when a mouse
5130
button or any key except
5131
.SM Escape
5132
is pressed.  Escape aborts manual placement which places the
5133
window in the top left corner of the screen. If mouse button 2 is
5134
pressed during the initial placement of a window (respectively
5135
.SM Shift
5136
and mouse button 1 in case Mwm emulation has been enabled with the
5137
.B Emulate
5138
command), the user is asked to resize the window too.  Pressing
5139
button 3 sets the
5140
.I PlacedByButton3
5141
condition (see
5142
.B Current
5143
command).
5144
5145
Example:
5146
.EX
5147
Style * ManualPlacement
5148
5149
*FvwmEvent: PassID
5150
*FvwmEvent: add_window GrowDownFunc
5151
AddToFunc StartFunction
5152
+ I FvwmEvent
5153
5154
AddToFunc GrowDownFunc
5155
+ I windowid $0 (PlacedByButton3) \\
5156
  Resize bottomright keep -0p
5157
.EE
5158
5159
Now, whenever a window is created and the user presses button 3 to
5160
finish initial placement, the window is automatically enlarged
5161
until it hits the bottom screen border.
5162
5163
.I Old placement styles
5164
DumbPlacement / SmartPlacement / SmartPlacementOff,
5165
ActivePlacement / RandomPlacement,
5166
ActivePlacementsHonorsStartsOnPage / ActivePlacementsHonorsStartsOnPageOff,
5167
GlobalOpts SmartPlacementIsReallySmart / GlobalOpts SmartPlacementIsNormal
5168
are still supported but will be removed in the future. The old and
5169
new styles can be translated according to the following table:
5170
.EX
5171
GlobalOpts SmartPlacementIsReallySmart
5172
Style * SmartPlacement
5173
  -->
5174
Style * SmartPlacement, CleverPlacement
5175
5176
Global SmartPlacementIsNormal
5177
Style * SmartPlacement
5178
  -->
5179
Style * SmartPlacement, CleverPlacementOff
5180
5181
Style * DumbPlacement, RandomPlacement
5182
  -->
5183
Style * CascadePlacement
5184
5185
Style * DumbPlacement, ActivePlacement
5186
  -->
5187
Style * ManualPlacement
5188
5189
Style * SmartPlacement + RandomPlacement + CleverPlacementOff
5190
  -->
5191
Style * TileCascadePlacement
5192
5193
Style * SmartPlacement + ActivePlacement + CleverPlacementOff
5194
  -->
5195
Style * TileManualPlacement
5196
5197
Style * SmartPlacement + CleverPlacement
5198
  -->
5199
Style * MinOverlapPlacement
5200
5201
Style * SmartPlacement, ActivePlacement, CleverPlacement
5202
  -->
5203
Style * MinOverlapPercentPlacement
5204
5205
Style * ActivePlacementsHonorsStartsOnPage
5206
  -->
5207
Style * ManualPlacementsHonorsStartsOnPage
5208
5209
Style * ActivePlacementsHonorsStartsOnPageOff
5210
  -->
5211
Style * ManualPlacementsHonorsStartsOnPageOff
5212
.EE
5213
5214
.\" +++++++++++++++ placement options and stacking policy
5215
.TP
5216
.B Placement policy options and window stacking
5217
.I NoPPosition
5218
instructs fvwm to ignore the program specified position (PPosition
5219
hint) when adding new windows.  Using PPosition is required for
5220
some applications, but if you don't have one of those its a real
5221
headache.  Many programs set PPosition to something obnoxious like
5222
0,0 (upper left corner).
5223
5224
.I NoUSPosition
5225
works like
5226
.I NoPPosition
5227
but applies suppresses using the user specified position indicated
5228
by the program (USPosition hint).  It is generally a bad thing to
5229
override the user's choice, but some applications misuse the
5230
USPosition hint to force their windows to a certain spot on the
5231
screen without the user's consent.
5232
5233
.IR NoTransientPPosition " and " UseTransientPPosition
5234
work like
5235
.IR NoPPosition " and " UsePPosition
5236
but apply only to transient windows.
5237
5238
.I NoIconPosition
5239
instructs fvwm to ignore the program specified icon position
5240
(IconPosition hint) when iconifying the window.
5241
5242
.I StartsOnDesk
5243
takes a numeric argument which is the desktop number on which the
5244
window should be initially placed.  Note that standard Xt programs
5245
can also specify this via a resource (e.g. "-xrm '*Desk: 1'").
5246
5247
.I StartsOnPage
5248
takes 1, 2, or 3 numeric arguments.  If one or three arguments are
5249
given, the first (or only) argument is the desktop number. If
5250
three arguments are given, the 2nd and 3rd arguments identify the
5251
x,y page position on the virtual window.  If two arguments are
5252
given, they specify the page position, and indicate no desk
5253
preference.  If only one argument is given,
5254
.I StartsOnPage
5255
functions exactly like
5256
.IR StartsOnDesk .
5257
For those standard Xt programs which understand this usage, the
5258
starting desk/page can also be specified via a resource (e.g.,
5259
"-xrm '*page: 1 0 2'").
5260
.I StartsOnPage
5261
in conjunction with
5262
.I SkipMapping
5263
is a useful technique when you want to start an app on some other
5264
page and continue with what you were doing, rather than waiting
5265
for it to appear.
5266
5267
.I StartsOnScreen
5268
takes one argument.  It can be 'p' for the primary screen, 'c' for
5269
the current screen (containing the mouse pointer), 'g' for the
5270
global screen or the screen number itself (counting from zero).
5271
A new window is placed on the specified Xinerama screen.  The
5272
default is to place windows on the screen that contains the mouse
5273
pointer at the time the window is created.
5274
However, those windows which are not placed by FVWM (i.e., those with
5275
a USPosition hint from a user specified geometry) are normally placed
5276
in a position relative to the global screen.  The
5277
.I StartsOnScreen
5278
style is also useful to cause these windows to be placed relative
5279
to a specific Xinerama screen.  For example:
5280
.EX
5281
Style * StartsOnScreen c
5282
.EE
5283
Would cause all windows, including those with their own geometry
5284
to be placed relative to the current Xinerama screen rather than
5285
the global screen.
5286
For those standard Xt programs which understand this usage, the
5287
starting desk/page can also be specified via a resource (e.g.,
5288
"-xrm '*fvwmscreen: c'").  ('fvwmscreen' was chosen
5289
because some applications already use '.screen' for other
5290
purposes.)
5291
5292
.I StartsOnPageIncludesTransients
5293
causes the
5294
.I StartsOnPage
5295
style to be applied even for transient windows.  This is not
5296
usually useful, since transients are usually pop ups that you want
5297
to appear in your visible viewport; but occasionally an
5298
application uses a transient for something like a startup window
5299
that needs to be coerced into place.
5300
5301
.I ManualPlacementIgnoresStartsOnPage
5302
suppresses
5303
.IR StartsOnPage " or " StartsOnDesk
5304
placement in the event that both
5305
.IR ManualPlacement " and " SkipMapping
5306
are in effect when a window is created.  This prevents you from
5307
interactively placing a window and then wondering where it
5308
disappeared to, because it got placed on a different desk or page.
5309
.I ManualPlacementHonorsStartsOnPage
5310
allows this to happen anyway.  The option has no effect if
5311
.I SkipMapping
5312
is not in effect, because fvwm switches to the proper desk/page to
5313
perform interactive placement.  The default is
5314
.IR ManualPlacementIgnoresStartsOnPage "; "
5315
.I ManualPlacementHonorsStartsOnPage
5316
matches the way the old
5317
.I StartsOnDesk
5318
style used to handle the situation.
5319
5320
.I CaptureHonorsStartsOnPage
5321
causes the initial capture (of an already existing window) at
5322
startup to place the window according to the
5323
.IR StartsOnPage " and " StartsOnScreen
5324
desk, page and Xinerama screen specification.
5325
.I CaptureIgnoresStartsOnPage
5326
causes fvwm to ignore these settings (including
5327
.IR StartsOnDesk )
5328
on initial capture.  The default is
5329
.IR CaptureIgnoresStartsOnPage .
5330
5331
.I RecaptureHonorsStartsOnPage
5332
causes a window to be placed according to, or revert to, the
5333
.IR StartsOnPage " and " StartsOnScreen
5334
desk, page and Xinerama screen specification on
5335
.BR Restart " or " Recapture .
5336
.I RecaptureIgnoresStartsOnPage
5337
causes fvwm to respect the current window position on
5338
.BR Restart " or " Recapture .
5339
The default is
5340
.IR RecaptureIgnoresStartsOnPage .
5341
5342
.I Layer
5343
accepts one optional argument: a non-negative integer.  This is
5344
the layer the window is put in.  If no argument is given, any
5345
previously set value is deleted and the default layer is implied.
5346
5347
.I StaysOnTop
5348
puts the window in the top layer.  This layer can be changed by
5349
the built-in command
5350
.BR DefaultLayers ;
5351
the default is 6.
5352
5353
.I StaysPut
5354
puts the window in the put layer.  This layer can be changed by
5355
the built-in command
5356
.BR DefaultLayers ;
5357
the default is 4.
5358
5359
.I StaysOnBottom
5360
puts the window in the bottom layer.  This layer can be changed by
5361
the built-in command
5362
.BR DefaultLayers ;
5363
the default is 2.
5364
5365
.I StartsLowered
5366
instructs fvwm to put the window initially at the bottom of its
5367
layer rather than the default
5368
.IR StartsRaised .
5369
5370
.I SkipMapping
5371
tells fvwm not to switch to the desk the window is on when it gets
5372
mapped initially (useful with
5373
.IR StartsOnDesk " or " StartsOnPage ).
5374
5375
.I KeepWindowGroupsOnDesk
5376
makes new windows that have the window group hint set appear on
5377
the same desk as the other windows of the same group.  Since this
5378
bevhaviour may be confusing, the default setting is
5379
.IR ScatterWindowGroups .
5380
The window group hint is ignored when placing windows in this
5381
case.
5382
5383
.\" +++++++++++++++ transient windows
5384
.TP
5385
.B Transient windows
5386
.I DecorateTransient
5387
causes transient windows, which are normally left undecorated, to
5388
be given the usual fvwm decorations (title bar, buttons,
5389
etc.). Note that some pop-up windows, such as the xterm menus, are
5390
not managed by the window manager and still do not receive
5391
decorations.
5392
.I NakedTransient
5393
(the default) causes transient windows not to be given the
5394
standard decorations. You can only bind keys or mouse buttons to
5395
the sides and the client window of an undecorated window ('S'
5396
and 'W' contexts in bindings, see
5397
.BR Mouse " and " Key
5398
commands).
5399
5400
A window with the
5401
.I RaiseTransient
5402
style that has transient windows raises all its transients when it
5403
is raised.  The
5404
.I DontRaiseTransient
5405
style disables this behavior.  All windows are then treated as if
5406
they had no transients.
5407
5408
A window with the
5409
.I LowerTransient
5410
style that has transient windows lowers all its transients when it
5411
is lowered.  The
5412
.I DontLowerTransient
5413
style disables this behavior.  All windows are then treated as if
5414
they had no transients.
5415
5416
The
5417
.I StackTransientParent
5418
style augments
5419
.IR RaiseTransient " and " LowerTransient
5420
styles.  Raising a window with
5421
.I StackTransientParent
5422
style transfers the raise action to the main window if the window
5423
being raised is a transient and its main window has
5424
.I RaiseTransient
5425
style; this effect makes raise on a transient act just like raise
5426
on its main - the whole group is raised.  Similar behavior holds
5427
for lowering a whole group of transients when the main has
5428
.I LowerTransient
5429
style.
5430
.I DontStackTransientParent
5431
turns this behavior off.
5432
.I (Dont)StackTransientParent
5433
has no effect if
5434
.IR RaiseTransient " and " LowerTransient
5435
are not used.
5436
5437
A reasonable emulation of Motif raise/lower on transients is
5438
possible like this
5439
.EX
5440
Style * RaiseTransient
5441
Style * LowerTransient
5442
Style * StackTransientParent
5443
.EE
5444
5445
.\" +++++++++++++++ miscellaneous
5446
.TP
5447
.B Miscellaneous
5448
The
5449
.IR BackingStore " and " SaveUnder
5450
styles enable the corresponding window attributes in the X server.
5451
.I BackingStore
5452
means that the X server tries to keep the obscured parts of a
5453
window in memory while windows with
5454
.I SaveUnder
5455
store the graphics below them.  Either option can speed up fvwm if
5456
the connection to the X server is slow (e.g. over a modem link).
5457
By default both styles are turned off.  To switch them off
5458
explicitly you can use the
5459
.IR BackingStoreOff " and " SaveUnderOff
5460
styles.
5461
5462
.I ParentalRelativity
5463
enables clients that use a background pixmap of type
5464
.IR ParentRelative
5465
to achieve transparency. Fvwm modules that support transparent
5466
colorsets require this setting.
5467
.I Opacity
5468
is the default and should be used for all non-transparent clients
5469
for better performance.
5470
5471
.I MwmDecor
5472
makes fvwm attempt to recognize and respect the mwm decoration
5473
hints that applications occasionally use.  To switch this style
5474
off, use the
5475
.I NoDecorHint
5476
style.
5477
5478
.I MwmFunctions
5479
makes fvwm attempt to recognize and respect the mwm prohibited
5480
operations hints that applications occasionally use.
5481
.I HintOverride
5482
makes fvwm shade out operations that mwm would prohibit, but it
5483
lets you perform the operation anyway.
5484
.I NoFuncHint
5485
allows turns off the mwm hints completely.
5486
5487
.I OLDecor
5488
makes fvwm attempt to recognize and respect the olwm and olvwm
5489
hints that many older XView and OLIT applications use.  Switch
5490
this option off with
5491
.IR NoOLDecor .
5492
5493
With
5494
.I GNOMEIgnoreHints
5495
fvwm ignores all GNOME hints for the window, even if GNOME
5496
compliance is compiled in.  This is useful for those pesky
5497
applications that try to be more clever than the user and use
5498
GNOME hints to force the window manager to ignore the user's
5499
preferences.  The
5500
.I GNOMEUseHints
5501
style switches back to the default behaviour.
5502
5503
.I UseDecor
5504
accepts one argument: the name of a decor created with
5505
.BR AddToDecor .
5506
If no decor name is specified, the "Default" decor is
5507
used. Windows do not actually contain decors, but are always
5508
assigned to one.  If the decor is later modified with
5509
.BR AddToDecor ,
5510
the changes are visible for all windows which are assigned to it.
5511
The decor for a window can be reassigned with
5512
.BR ChangeDecor .
5513
5514
.I UseStyle
5515
takes one arg, which is the name of another style.  That way you
5516
can have unrelated window names easily inherit similar traits
5517
without retyping.  For example:
5518
.EX
5519
  Style rxvt UseStyle XTerm
5520
.EE
5521
Warning:  If a style is built from one or more parent styles and
5522
the parent styles are changed, the derived style is not
5523
modified. To achieve this you have to issue the
5524
.I UseStyle
5525
line again.
5526
5527
.\" +++++++++++++++ examples
5528
.TP
5529
.B Examples
5530
.EX
5531
# Change default fvwm behavior to no title-
5532
# bars on windows! Also define a default icon.
5533
Style *             NoTitle,               \\
5534
                    Icon unknown1.xpm,     \\
5535
                    BorderWidth 4,         \\
5536
                    HandleWidth 5
5537
5538
# now, window specific changes:
5539
Style Fvwm*       NoHandles, Sticky,       \\
5540
                  WindowListSkip,          \\
5541
                  BorderWidth 0
5542
Style FvwmPager   StaysOnTop, BorderWidth 0
5543
Style *lock       NoHandles, Sticky,       \\
5544
                  StaysOnTop, WindowListSkip
5545
Style xbiff       Sticky, WindowListSkip
5546
Style FvwmButtons NoHandles, Sticky,       \\
5547
                  WindowListSkip
5548
Style sxpm        NoHandles
5549
5550
# Put title-bars back on xterms only!
5551
Style xterm     Title, Color black/grey
5552
5553
Style rxvt        Icon term.xpm
5554
Style xterm       Icon rterm.xpm
5555
Style xcalc       Icon xcalc.xpm
5556
Style xbiff       Icon mail1.xpm
5557
Style xmh         Icon mail1.xpm,         \\
5558
                    StartsOnDesk 2
5559
Style xman        Icon xman.xpm
5560
Style matlab      Icon math4.xpm,         \\
5561
                    StartsOnDesk 3
5562
Style xmag        Icon magnifying_glass2.xpm
5563
Style xgraph      Icon graphs.xpm
5564
Style FvwmButtons Icon toolbox.xpm
5565
Style Maker       StartsOnDesk 1
5566
Style signal      StartsOnDesk 3
5567
5568
# Fire up Netscape on the second desk, in the
5569
# middle of my 3x3 virtual desktop, and don't
5570
# bother me with it...
5571
Style Netscape* SkipMapping,              \\
5572
                StartsOnPage 1 1 1
5573
.EE
5574
Note that all properties for a window are or'ed together.  In the
5575
above example "FvwmPager" gets the property
5576
.I StaysOnTop
5577
via an exact window name match but also gets
5578
.IR NoHandles ", " Sticky " and " WindowListSkip
5579
by a match to "Fvwm*".  It gets
5580
.I NoTitle
5581
by virtue of a match to "*".  If conflicting styles are specified
5582
for a window, then the last style specified are used.
5583
5584
If the
5585
.I NoIcon
5586
attribute is set then the specified window simply disappears when
5587
it is iconified.  The window can be recovered through the
5588
window-list.  If
5589
.I Icon
5590
is set without an argument then the
5591
.I NoIcon
5592
attribute is cleared but no icon is specified.  An example which
5593
allows only the FvwmPager module icon to exist:
5594
.EX
5595
Style * NoIcon
5596
Style FvwmPager Icon
5597
.EE
5598
5599
.TP
5600
.BI "DestroyStyle " style
5601
Deletes the style named
5602
.IR style .
5603
The changes take effect immediately.  Note that
5604
.I style
5605
is not a wild-carded search string, but rather a case-sensitive
5606
string that should exactly match the original
5607
.B Style
5608
command.
5609
5610
Destroying style "*" can be done, but isn't really to be
5611
recommended. For example:
5612
.EX
5613
DestroyStyle Application*
5614
.EE
5615
This removes all settings for the style named "Application*", NOT
5616
all styles starting with "Application".
5617
5618
.SS OTHER COMMANDS CONTROLLING WINDOW STYLES
5619
5620
.IP "\fBAddButtonStyle\fP \fIbutton\fP \
5621
\fB[\fP \fIstate\fP \
5622
\fB] [\fP \fIstyle\fP \
5623
\fB] [-- [!]\fP \fIflag\fP \
5624
\fB...]\fP"
5625
5626
Adds a button style to
5627
.IR button .
5628
.I button
5629
can be a button number, or one of "All", "Left" or "Right".
5630
.I state
5631
can be "ActiveUp," "ActiveDown" or "Inactive" or any of these
5632
three with "Toggled" prepended.  "ActiveUp" selects the style of
5633
the button when the window has the focus and the button is not
5634
pressed. "ActiveDown" is similar but applies when the button is
5635
pressed while the "Inactive" style is used for windows without the
5636
focus.  The "Toggled" prefix refers to maximized, shaded or sticky
5637
windows that have the corresponding
5638
.I MwmDecor...
5639
button style set.  If
5640
.I state
5641
is omitted, then the style is added to every state.  If the
5642
.IR style " and " flags
5643
are enclosed in parentheses, then multiple
5644
.I state
5645
definitions can be placed on a single line.
5646
.I Flags
5647
for additional button styles cannot be changed after definition.
5648
5649
Buttons are drawn in the order of definition, beginning with the
5650
most recent button style, followed by those added with
5651
.BR AddButtonStyle .
5652
To clear the button style stack, change style flags, or for
5653
descriptions of available styles and flags, see the
5654
.B ButtonStyle
5655
command.  Examples:
5656
.EX
5657
ButtonStyle 1 Pixmap led.xpm -- Top Left
5658
ButtonStyle 1 ActiveDown HGradient 8 grey \\
5659
  black
5660
ButtonStyle All --  UseTitleStyle
5661
AddButtonStyle 1 ActiveUp (Pixmap a.xpm)  \\
5662
  ActiveDown (Pixmap b.xpm -- Top)
5663
AddButtonStyle 1 Vector 4 50x30@1 70x70@0 \\
5664
  30x70@0 50x30@1
5665
.EE
5666
Initially for this example all button states are set to a pixmap.
5667
The second line replaces the "ActiveDown" state with a gradient
5668
(it overrides the pixmap assigned to it in the line before, which
5669
assigned the same style to every state).  Then, the
5670
.I UseTitleStyle
5671
flag is set for all buttons, which causes fvwm to draw any styles
5672
set with
5673
.B TitleStyle
5674
before drawing the buttons.  Finally,
5675
.B AddButtonStyle
5676
is used to place additional pixmaps for both "ActiveUp" and
5677
"ActiveDown" states and a vector button style is drawn on top of
5678
all state.
5679
5680
.IP "\fBAddTitleStyle [\fP \fIstate\fP \
5681
\fB] [\fP \fIstyle\fP \
5682
\fB] [-- [!]\fP \fIflag\fP \
5683
\fB...]\fP"
5684
Adds a title style to the title-bar.
5685
.I state
5686
can be one of "ActiveUp," "ActiveDown" or "Inactive" or any of
5687
these with "Toggled" prepended.  If
5688
.I state
5689
is omitted, then the style is added to every state.  If the
5690
.IR style " and " flags
5691
are enclosed in parentheses, then multiple
5692
.I state
5693
definitions can be placed on a single line.  This command is quite
5694
similar to the
5695
.B AddButtonStyle
5696
command (see above).
5697
5698
Title-bars are drawn in the order of definition, beginning with
5699
the most recent
5700
.BR TitleStyle ,
5701
followed by those added with
5702
.BR AddTitleStyle .
5703
To clear the title style stack, change style flags, or for the
5704
descriptions of available styles and flags, see the
5705
.BR TitleStyle " and " ButtonStyle
5706
commands.
5707
5708
.TP
5709
.BI "AddToDecor " decor
5710
Add or divert commands to the decor named
5711
.IR decor .
5712
A decor is a name given to the set of commands which affect button
5713
styles, title-bar styles and border styles.  If
5714
.I decor
5715
does not exist it is created; otherwise the existing
5716
.I decor
5717
is modified.  Note: Earlier versions allowed to use the
5718
.BR HilightColor ", " HilightColorset " and " WindowFont
5719
commands in decors.  This is no longer possible.  Please use the
5720
.I Style
5721
command with the
5722
.IR Hilight... " and " Font
5723
options.
5724
5725
New decors start out exactly like the "default" decor without any
5726
style definitions.  A given decor may be applied to a set of
5727
windows with the
5728
.I UseDecor
5729
option of the
5730
.B Style
5731
command.  Modifying an existing decor affects all windows which
5732
are currently assigned to it.
5733
5734
.B AddToDecor
5735
is similar in usage to the
5736
.BR AddToMenu " and " AddToFunc
5737
commands, except that menus and functions are replaced by
5738
.BR ButtonStyle ", " AddButtonStyle ", " TitleStyle ,
5739
.BR AddTitleStyle " and " BorderStyle
5740
commands.  Decors created with
5741
.B AddToDecor
5742
can be manipulated with
5743
.BR ChangeDecor ", " DestroyDecor ", " UpdateDecor
5744
and the
5745
.IB "UseDecor " Style
5746
option.
5747
5748
The following example creates a decor "FlatDecor" and style
5749
"FlatStyle".  They are distinct entities:
5750
.EX
5751
AddToDecor FlatDecor
5752
 + ButtonStyle All ActiveUp (-- flat) \\
5753
   Inactive (-- flat)
5754
 + TitleStyle -- flat
5755
 + BorderStyle -- HiddenHandles NoInset
5756
5757
Style FlatStyle UseDecor FlatDecor, \\
5758
     Color white/grey40,HandleWidth 4
5759
5760
Style xterm UseStyle FlatStyle
5761
.EE
5762
An existing window's decor may be reassigned with
5763
.BR ChangeDecor .
5764
A decor can be destroyed with
5765
.BR DestroyDecor .
5766
.EX
5767
DestroyDecor FlatDecor
5768
AddToDecor FlatDecor ...
5769
5770
Style FlatStyle UseDecor FlatDecor, \\
5771
     Color white/grey40,HandleWidth 4
5772
.EE
5773
and now apply the style again:
5774
.EX
5775
Style xterm UseStyle FlatStyle
5776
.EE
5777
5778
.IP "\fBBorderStyle [\fP \fIstate\fP \
5779
\fB] [\fP \fIstyle\fP \
5780
\fB] [-- [!]\fP \fIflag\fP \
5781
\fB...]\fP"
5782
Defines a border style for windows.
5783
.I state
5784
can be either "Active" or "Inactive".  If
5785
.I state
5786
is omitted, then the style is set for both states.  If the
5787
.IR style " and " flags
5788
are enclosed in parentheses, then multiple
5789
.I state
5790
definitions can be specified per line.
5791
5792
.I style
5793
is a subset of the available button styles, and can only be
5794
.I TiledPixmap
5795
(uniform pixmaps which match the bevel colors work best this
5796
way). If a
5797
.RI ' ! '
5798
is prefixed to any
5799
.IR flag ,
5800
the behavior is negated.  If
5801
.I style
5802
is not specified, then one can change flags without resetting the
5803
style.
5804
5805
The
5806
.I HiddenHandles
5807
flag hides the corner handle dividing lines on windows with
5808
handles (this option has no effect for NoHandle windows).  By
5809
default,
5810
.I HiddenHandles
5811
is disabled.
5812
5813
The
5814
.I NoInset
5815
flag supplements
5816
.IR HiddenHandles .
5817
If given, the inner bevel around the window frame is not drawn.
5818
If
5819
.I HiddenHandles
5820
is not specified, the frame looks a little strange.
5821
5822
.I Raised
5823
causes a raised relief pattern to be drawn (default).
5824
.I Sunk
5825
causes a sunken relief pattern to be drawn.
5826
.I Flat
5827
inhibits the relief pattern from being drawn.
5828
5829
To decorate the active and inactive window borders with a textured
5830
pixmap, one might specify:
5831
.EX
5832
BorderStyle Active TiledPixmap marble.xpm
5833
BorderStyle Inactive TiledPixmap granite.xpm
5834
BorderStyle Active -- HiddenHandles NoInset
5835
.EE
5836
To clear the style for both states:
5837
.EX
5838
BorderStyle Simple
5839
.EE
5840
To clear for a single state:
5841
.EX
5842
BorderStyle Active Simple
5843
.EE
5844
To unset a flag for a given state:
5845
.EX
5846
BorderStyle Inactive -- !NoInset
5847
.EE
5848
title-bar buttons can inherit the border style with the
5849
.I UseBorderStyle
5850
flag (see
5851
.BR ButtonStyle ).
5852
5853
.TP
5854
.BI "ButtonState [" "ActiveDown bool" "] [" "inactive bool" "]"
5855
The
5856
.B ButtonState
5857
command controls which states of the window titles and title
5858
buttons are used.  The default is to use all three states:
5859
"ActiveUp", "ActiveDown" and "Inactive" (see
5860
.BR ButtonStyle " and " TitleStyle
5861
commands).  The
5862
.I bool
5863
argument after the key word controls if the designated state is
5864
used ("True") or not ("False").  The "ActiveUp" state cannot be
5865
deactivated. If no arguments are provided or the given arguments
5866
are illegal, the default is restored.
5867
5868
The "ActiveDown" state allows different button styles for pressed
5869
down buttons and titles on active windows.  Otherwise the
5870
"ActiveUp" state is used instead.  The "Inactive" state allows
5871
different button and title styles for inactive windows.  Otherwise
5872
the "ActiveUp" state is used instead.
5873
5874
.IP "\fBButtonStyle\fP \fIbutton\fP \
5875
\fB[\fP \fIstate\fP \
5876
\fB] [\fP \fIstyle\fP \
5877
\fB] [-- [!]\fP \fIflag\fP \
5878
\fB...]\fP"
5879
Sets the button style for a title-bar button.
5880
.I button
5881
is the title-bar button number between 0 and 9, or one of "All",
5882
"Left", "Right", or "Reset".  Button numbering is described in the
5883
.B Mouse
5884
command section.  If the
5885
.IR style " and " flags
5886
are enclosed in parentheses, then multiple
5887
.I state
5888
definitions can be specified per line.
5889
5890
.I state
5891
refers to which button state should be set.  Button states are
5892
defined as follows: "ActiveUp" and "ActiveDown" refer to the
5893
un-pressed and pressed states for buttons on active windows; while
5894
the "Inactive" state denotes buttons on inactive windows.  The
5895
"ToggledActiveUp", "ToggledActiveDown" and "ToggledInactive"
5896
states are used instead for buttons which have one of the
5897
.IR MwmDecorMax ", " MwmDecorShade " or " MwmDecorStick
5898
hints, if the window is maximized, shaded or sticky, respectively.
5899
.EX
5900
AddToDecor Default
5901
 + ButtonStyle 6                   \\
5902
   Vector 4 50x25@1 85x75@0 15x75@0 50x25@1
5903
 + ButtonStyle 6 ToggledActiveUp   \\
5904
   Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
5905
 + ButtonStyle 6 ToggledActiveDown \\
5906
   Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
5907
 + ButtonStyle 6 ToggledInactive   \\
5908
   Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
5909
 + ButtonStyle 6 - MwmDecorShade
5910
Mouse 0 6 N WindowShade
5911
.EE
5912
If
5913
.I state
5914
is "ActiveUp", "ActiveDown", "Inactive", or a "Toggled" variant,
5915
that particular button state is set.  If
5916
.I state
5917
is omitted, every state is set.  Specifying a style destroys the
5918
current style (use
5919
.B AddButtonStyle
5920
to avoid this).
5921
5922
If
5923
.I style
5924
is omitted, then state-dependent flags can be set for the primary
5925
button style without destroying the current style.  Examples (each
5926
line should be considered independent):
5927
.EX
5928
ButtonStyle Left -- flat
5929
ButtonStyle All ActiveUp (-- flat) \\
5930
  Inactive (-- flat)
5931
.EE
5932
The first line sets every state of the left buttons to flat, while
5933
the second sets only the "ActiveUp" and "Inactive" states of every
5934
button to flat (only flags are changed; the buttons' individual
5935
styles are not changed).
5936
5937
If you want to reset all buttons to their defaults:
5938
.EX
5939
ButtonStyle Reset
5940
.EE
5941
To reset the "ActiveUp" button state of button 1 to the default:
5942
.EX
5943
ButtonStyle 1 ActiveUp Default
5944
.EE
5945
To reset all button states of button 1 to the default of
5946
button number 2:
5947
.EX
5948
ButtonStyle 1 Default 2
5949
.EE
5950
For any button, multiple
5951
.I state
5952
definitions can be given on one line by enclosing the
5953
.IR style " and " flags
5954
in parentheses.  If only one definition per line is given the
5955
parentheses can be omitted.
5956
5957
.I flags
5958
affect the specified
5959
.IR state .
5960
If a
5961
.RI ' ! '
5962
is prefixed to any
5963
.IR flag ,
5964
its behavior is negated.  The available state-dependent flags for
5965
all styles are described here (the
5966
.B ButtonStyle
5967
entry deals with state-independent flags).
5968
5969
.I Raised
5970
causes a raised relief pattern to be drawn.
5971
5972
.I Sunk
5973
causes a sunken relief pattern to be drawn.
5974
5975
.I Flat
5976
inhibits the relief pattern from being drawn.
5977
5978
.I UseTitleStyle
5979
causes the given button state to render the current title style
5980
before rendering the button's own styles.  The
5981
.IR Raised ", " Flat " and " Sunk
5982
.B TitleStyle
5983
flags are ignored since they are redundant in this context.
5984
5985
.I UseBorderStyle
5986
causes the button to inherit the decorated
5987
.B BorderStyle
5988
options.
5989
5990
.IR Raised ", " Sunk " and " Flat
5991
are mutually exclusive, and can be specified for the initial
5992
.B ButtonStyle
5993
only.
5994
.IR UseTitleStyle " and " UseBorderStyle
5995
are also mutually exclusive (both can be off however).  The default is
5996
.I Raised
5997
with both
5998
.I UseBorderStyle " and " UseTitleStyle
5999
left unset.
6000
6001
.I Important note
6002
for the "ActiveDown" state:  When a button is pressed, the relief
6003
is inverted.  Because of this, to obtain a sunken "ActiveDown"
6004
state you must specify the opposite of the desired relief (i.e. to
6005
obtain a pressed-in look which is raised, specify
6006
.I Sunk
6007
for "ActiveDown").  This behavior is consistent, but may seem
6008
confusing at first.  The same applies to the "Toggled" state.
6009
6010
Button styles are classified as non-destructive, partially
6011
destructive, or fully destructive.  Non-destructive styles do not
6012
affect the image. Partially destructive styles can obscure some or
6013
all parts of the underlying image (i.e.
6014
.IR Pixmap ).
6015
Fully destructive styles obscure the entire underlying image (i.e.
6016
.I Solid
6017
or one of the
6018
.I gradient
6019
styles).  Thus, if stacking styles with
6020
.BR AddButtonStyle " (or " AddTitleStyle
6021
for title-bars), use care in sequencing styles to minimize redraw.
6022
6023
The available styles and their arguments now follow.
6024
6025
The
6026
.I Simple
6027
style does nothing.  There are no arguments, and this style is an
6028
example of a non-destructive button style.
6029
6030
The
6031
.I Default
6032
style conditionally accepts one argument: a number which specifies
6033
the default button number to load.  If the style command given is
6034
.BR ButtonStyle " or " AddButtonStyle ,
6035
the argument is optional (if given, overrides the current button).
6036
If a command other than
6037
.BR ButtonStyle " or " AddButtonStyle
6038
is used, the number must be specified.
6039
6040
The
6041
.I Solid
6042
style fills the button with a solid color.  The relief border
6043
color is not affected.  The color should be specified as a single
6044
argument.  This style is fully destructive.
6045
6046
The
6047
.I "Vector num"
6048
.IR X x Y @ C " ..."
6049
style draws a line pattern.  Since this is a standard button style,
6050
the keyword
6051
.I Vector
6052
is optional,
6053
.I num
6054
is a number of point specifications of the form
6055
.IR X x Y @ C .
6056
.IR X " and " Y
6057
are point coordinates inside the button, given in percents
6058
(from 0 to 100).
6059
.I C
6060
specifies a line color (0 - the shadow color, 1 - the highlight color,
6061
2 - the background color, 3 - the foreground color).
6062
The first point color is not used.
6063
You can use up to 32 points in a line pattern.
6064
This style is partially destructive.
6065
6066
The specification is a little cumbersome:
6067
.EX
6068
ButtonStyle 2 Vector 4 50x30@1 70x70@0 \\
6069
  30x70@0 50x30@1
6070
.EE
6071
then the button 2 decoration uses a 4-point pattern consisting of
6072
a line from (x=50,y=30) to (70,70) in the shadow color (@0), and
6073
then to (30,70) in the shadow color, and finally to (50,30) in the
6074
highlight color (@1).  Is that too confusing?  See the fvwm web
6075
pages for some examples with screenshots.
6076
6077
A more complex example of
6078
.IR Vector :
6079
.EX
6080
ButtonStyle 8 Vector 10 45x65@2 45x75@3 20x75@3 20x50@3 \\
6081
  35x50@3 35x65@1 35x25@1 75x25@1 75x65@0 35x65@0
6082
ButtonStyle 0 Vector 10 45x65@2 45x75@0 20x75@0 20x50@1 \\
6083
  45x50@1 45x65@0 75x65@3 75x25@3 35x25@3 35x47@3
6084
.EE
6085
The
6086
.I ?Gradient
6087
styles denote color gradients.  Fill in the question mark with any
6088
one of the defined gradient types.  Please refer to the
6089
.B COLOR GRADIENTS
6090
section for a description of the gradient syntax.  The gradient
6091
styles are fully destructive.
6092
6093
The
6094
.I Pixmap
6095
style displays a pixmap.  A pixmap should be specified as an
6096
argument.  For example, the following would give button 2 the same
6097
pixmap for both states, and button 4 different pixmaps for the up,
6098
down and inactive states.
6099
.EX
6100
ButtonStyle 2 Pixmap my_pixmap.xpm
6101
ButtonStyle 4 ActiveUp (Pixmap up.xpm) \\
6102
  ActiveDown (Pixmap down.xpm)
6103
ButtonStyle 4 Inactive Pixmap inactive.xpm
6104
.EE
6105
The pixmap specification can be given as an absolute or relative
6106
pathname (see
6107
.BR ImagePath ).
6108
If the pixmap cannot be found, the button style reverts to
6109
.IR Simple .
6110
Flags specific to the
6111
.I Pixmap
6112
style are
6113
.IR Left ", " Right ", "
6114
.IR Top ", and " Bottom .
6115
These can be used to justify the pixmap (default is centered for
6116
both directions).  Pixmap transparency is used for the color
6117
"None."  This style is partially destructive.
6118
6119
The
6120
.I MiniIcon
6121
style draws the window's miniature icon in the button, which is
6122
specified with the
6123
.I MiniIcon
6124
option of the
6125
.B Style
6126
command.  This button style accepts no arguments.  Example:
6127
.EX
6128
Style *     MiniIcon mini-bx2.xpm
6129
Style xterm MiniIcon mini-term.xpm
6130
Style Emacs MiniIcon mini-doc.xpm
6131
6132
ButtonStyle 1 MiniIcon
6133
.EE
6134
The
6135
.I TiledPixmap
6136
style accepts a pixmap to be tiled as the button background. One
6137
pixmap is specified as an argument.  Pixmap transparency is not
6138
used.  This style is fully destructive.
6139
6140
.TP
6141
.BI "ButtonStyle " button " - [!]" flag " ..."
6142
Sets state-independent flags for the specified
6143
.IR button .
6144
State-independent flags affect button behavior.  Each
6145
.I flag
6146
is separated by a space.  If a
6147
.RI ' ! '
6148
is prefixed to the flag then the behavior is negated.  The special
6149
flag
6150
.I Clear
6151
clears any existing flags.
6152
6153
The following flags are usually used to tell fvwm which buttons
6154
should be affected by mwm function hints (see
6155
.I MwmFunctions
6156
option of the
6157
.B Style
6158
command.  This is not done automatically since you might have
6159
buttons bound to complex functions, for instance.
6160
6161
.I MwmDecorMenu
6162
should be assigned to title-bar buttons which display a menu.  The
6163
default assignment is the leftmost button.  When a window with the
6164
.I MwmFunctions
6165
.B Style
6166
option requests not to show this button, it is hidden.
6167
6168
.I MwmDecorMin
6169
should be assigned to title-bar buttons which minimize or iconify
6170
the window.  The default assignment is the second button over from
6171
the rightmost button.  When a window with the
6172
.I MwmFunctions
6173
.B Style
6174
option requests not to show this button, it is hidden.
6175
6176
.I MwmDecorMax
6177
should be assigned to title-bar buttons which maximize the
6178
window. The default assignment is the rightmost button.  When a
6179
window with the
6180
.I MwmFunctions
6181
.B Style
6182
option requests not to show this button, it is hidden.  When the
6183
window is maximized, the vector pattern on the button looks
6184
pressed in.
6185
6186
.I MwmDecorShade
6187
should be assigned to title-bar buttons which shade the window
6188
(see
6189
.B WindowShade
6190
command).  When the window is shaded, the vector pattern on the
6191
button looks pressed in.
6192
6193
.I MwmDecorStick
6194
should be assigned to title-bar buttons which make the window
6195
sticky. When the window is sticky, the vector pattern on the
6196
button looks pressed in.
6197
6198
.TP
6199
.BI "ChangeDecor " decor
6200
Changes the decor of a window to
6201
.IR decor .
6202
.I decor
6203
is "Default" or the name of a decor defined with
6204
.BR AddToDecor .
6205
If
6206
.I decor
6207
is invalid, nothing occurs.  If called from somewhere in a window
6208
or its border, then that window is affected.  If called from the
6209
root window the user is allowed to select the target window.
6210
.B ChangeDecor
6211
only affects attributes which can be set using the
6212
.B AddToDecor
6213
command.
6214
.EX
6215
ChangeDecor CustomDecor1
6216
.EE
6217
6218
.TP
6219
.BI "DestroyDecor [" recreate "] " decor
6220
Deletes the
6221
.I decor
6222
defined with
6223
.BR AddToDecor ,
6224
so that subsequent references to it are no longer valid.  Windows
6225
using this
6226
.I decor
6227
revert to the "Default" decor. The optional parameter
6228
.I recreate
6229
tells fvwm not to throw away the decor completely but to throw
6230
away only its contents. If the decor is created again later,
6231
windows do not use it before the
6232
.I UseDecor
6233
style is applied again unless the decor was destroyed with the
6234
.I recreate
6235
option.  The decor named "Default" cannot be destroyed.
6236
.EX
6237
DestroyDecor CustomDecor1
6238
.EE
6239
6240
.TP
6241
.BI "TitleStyle [" justification "] [" height " [" num "]]"
6242
Sets attributes for the title-bar.  Justifications can be
6243
.IR Centered ", " RightJustified " or " LeftJustified .
6244
.I height
6245
sets the title bar's height to an amount in pixels.  Defaults are
6246
.I Centered
6247
and the window's font height.  To reset the font height to the
6248
default value, omit the
6249
.I num
6250
argument after the
6251
.I height
6252
keyword.  Example:
6253
.EX
6254
TitleStyle LeftJustified Height 24
6255
.EE
6256
6257
.IP "\fBTitleStyle [\fP \fIstate\fP \
6258
\fB] [\fP \fIstyle\fP \
6259
\fB] [-- [!]\fP \fIflag\fP \
6260
\fB...]\fP"
6261
Sets the style for the title-bar.
6262
.I state
6263
can be one of  "ActiveUp", "ActiveDown", or "Inactive".  If
6264
.I state
6265
is omitted, then the
6266
.I style
6267
is added to every state.  If parentheses are placed around the
6268
.IR style " and " flags ,
6269
then multiple state definitions can be given per line.
6270
.I style
6271
can be omitted so that flags can be set while not destroying the
6272
current style.
6273
6274
If a
6275
.RI ' ! '
6276
is prefixed to any
6277
.IR flag ,
6278
its behavior is negated.  Valid flags for each state include
6279
.IR Raised ", " Flat " and " Sunk
6280
(these are mutually exclusive).  The default is
6281
.IR Raised .
6282
See the note in
6283
.B ButtonStyle
6284
regarding the "ActiveDown" state.  Examples:
6285
.EX
6286
TitleStyle ActiveUp HGradient 16 navy black
6287
TitleStyle ActiveDown (Solid red -- flat) \\
6288
  Inactive (TiledPixmap wood.xpm)
6289
TitleStyle ActiveUp (-- Flat) ActiveDown  \\
6290
  (-- Raised) Inactive (-- Flat)
6291
.EE
6292
This sets the "ActiveUp" state to a horizontal gradient, the
6293
"ActiveDown" state to solid red, and the "Inactive" state to a
6294
tiled wood pixmap. Finally, "ActiveUp" is set to look flat, while
6295
"ActiveDown" set to be sunk (the
6296
.I Raised
6297
flag for the "ActiveDown" state causes it to appear sunk due to
6298
relief inversion), and "Inactive" is set to flat as well. An
6299
example which sets flags for all states:
6300
.EX
6301
TitleStyle -- flat
6302
.EE
6303
For a flattened look:
6304
.EX
6305
TitleStyle -- flat
6306
ButtonStyle All ActiveUp (-- flat) Inactive \\
6307
  (-- flat)
6308
.EE
6309
6310
.TP
6311
.BI "UpdateDecor [" decor "]"
6312
This command is kept mainly for backwards compatibility.  Since
6313
all elements of a decor are updated immediately when they are
6314
changed, this command is mostly useless.
6315
6316
Updates window decorations.
6317
.I decor
6318
is an optional argument which specifies the
6319
.I decor
6320
to update.  If given, only windows which are assigned to that
6321
particular
6322
.I decor
6323
are updated.  This command is useful, for instance, after a
6324
.BR ButtonStyle ", " TitleStyle " or " BorderStyle
6325
(possibly used in conjunction with
6326
.BR AddToDecor ).
6327
Specifying an invalid decor results in all windows being
6328
updated. This command is less disturbing than
6329
.BR Recapture ,
6330
but does not affect window style options as
6331
.B Recapture
6332
does.
6333
6334
6335
.SS COMMANDS CONTROLLING THE VIRTUAL DESKTOP
6336
6337
.IP "\fBDesk\fP \fIarg1\fP \
6338
\fB[\fP \fIarg2\fP \
6339
\fB] [\fP \fImin max\fP \
6340
\fB]\fP"
6341
This command has been renamed.  Please see
6342
.B GotoDesk
6343
command.
6344
6345
.TP
6346
.BI "DeskTopSize " Horizontal x Vertical
6347
Defines the virtual desktop size in units of the physical screen
6348
size.
6349
6350
.TP
6351
.BI "EdgeResistance " "scrolling moving " [ "xinerama-moving" ]
6352
Tells how hard it should be to change the desktop viewport by
6353
moving the mouse over the edge of the screen and how hard it
6354
should be to move a window over the edge of the screen.
6355
6356
The first parameter tells how many milliseconds the pointer must
6357
spend on the screen edge before fvwm moves the viewport.  This is
6358
intended for people who use
6359
.EX
6360
EdgeScroll 100 100
6361
.EE
6362
but find themselves accidentally flipping pages when they don't
6363
want to.
6364
6365
The second parameter tells how many pixels over the edge of the
6366
screen a window's edge must move before it actually moves
6367
partially off the screen.  By default the viewport is moved a full
6368
page in the requested direction, but if you used
6369
.B EdgeScroll
6370
and set any values other than zero they is used instead.
6371
6372
Note that, with
6373
.EX
6374
EdgeScroll 0 0
6375
.EE
6376
it is still possible to move or resize windows across the edge of
6377
the current screen.  By making the first parameter to
6378
.B EdgeResistance
6379
10000 this type of motion is impossible.  With
6380
.B EdgeResistance
6381
less than 10000 but greater than 0 moving over pages becomes
6382
difficult but not impossible.  See also
6383
.BR EdgeThickness .
6384
6385
The optional third parameter does the same as the second, but for
6386
individual Xinerama screens.  If omitted,
6387
.I xinerama-moving
6388
will be set to the value of
6389
.IR moving .
6390
Set
6391
.I xinerama-moving
6392
to zero to ignore individual screen edges.
6393
6394
.TP
6395
.BI "EdgeScroll " horizontal "[" p "] " vertical "[" p "]"
6396
Specifies the percentage of a page to scroll when the cursor hits
6397
the edge of a page.  A trailing
6398
.RI ' p '
6399
changes the interpretation to mean pixels.  If you don't want any
6400
paging or scrolling when you hit the edge of a page include
6401
.EX
6402
EdgeScroll 0 0
6403
.EE
6404
in your
6405
.I .fvwm2rc
6406
file, or possibly better, set the
6407
.B EdgeThickness
6408
to zero.  See the
6409
.B EdgeThickness
6410
command. If you want whole pages, use
6411
.EX
6412
EdgeScroll 100 100
6413
.EE
6414
Both
6415
.IR horizontal " and " vertical
6416
should be positive numbers.
6417
6418
If the
6419
.IR horizontal " and " vertical
6420
percentages are multiplied by 1000 then scrolling wraps around at
6421
the edge of the desktop.  If
6422
.EX
6423
EdgeScroll 100000 100000
6424
.EE
6425
is used fvwm scrolls by whole pages, wrapping around at the edge
6426
of the desktop.
6427
6428
.TP
6429
.BI "EdgeThickness " 0 | 1 | 2
6430
This is the width or height of the invisible window that fvwm
6431
creates on the edges of the screen that are used for the edge
6432
scrolling feature.
6433
6434
In order to enable page scrolling via the mouse, four windows
6435
called the "pan frames" are placed at the very edge of the
6436
screen. This is how fvwm detects the mouse's presence at the
6437
window edge. Because of the way this works, they need to be at the
6438
top of the stack and eat mouse events, so if you have any kind of
6439
error along the lines of: "mouse clicks at the edge of the screen
6440
do the wrong thing" you're having trouble with the pan frames and
6441
(assuming you don't use the mouse to flip between pages) should
6442
set the EdgeThickness to 0.
6443
6444
A value of
6445
.I 0
6446
completely disables mouse edge scrolling, even while dragging a
6447
window.
6448
.I 1
6449
gives the smallest pan frames, which seem to work best except on
6450
some servers.
6451
6452
.I 2
6453
is the default.
6454
6455
Pan frames of
6456
.IR 1 " or " 2
6457
pixels can sometimes be confusing, for example, if you drag a
6458
window over the edge of the screen, so that it straddles a pan
6459
frame, clicks on the window, near the edge of the screen are
6460
treated as clicks on the root window.
6461
6462
.IP "\fBGotoDesk\fP \fIprev\fP \
6463
\fB|\fP \fIarg1\fP \
6464
\fB[\fP \fIarg2\fP \
6465
\fB] [\fP \fImin max\fP \
6466
\fB]\fP"
6467
Switches the current viewport to another desktop (workspace,
6468
room).
6469
6470
The command takes 1, 2, 3, or 4 arguments.  A single argument is
6471
interpreted as a relative desk number.  Two arguments are
6472
understood as a relative and an absolute desk number.  Three
6473
arguments specify a relative desk and the minimum and maximum of
6474
the allowable range. Four arguments specify the relative,
6475
absolute, minimum and maximum values.  (Desktop numbers can be
6476
negative).  If a literal
6477
.I prev
6478
is given as the single argument, the last visited desk number is
6479
used.
6480
6481
If
6482
.I arg1
6483
is non zero then the next desktop number is the current desktop
6484
number plus
6485
.IR arg1 .
6486
6487
If
6488
.I arg1
6489
is zero then the new desktop number is
6490
.IR arg2 .
6491
(If
6492
.I arg2
6493
is not present, then the command has no effect.)
6494
6495
If
6496
.IR min " and " max
6497
are given, the new desktop number is no smaller than
6498
.I min
6499
and no bigger than
6500
.IR max .
6501
Values out of this range are truncated (if you gave an absolute
6502
desk number) or wrapped around (if you gave a relative desk
6503
number).
6504
6505
The syntax is the same as for
6506
.BR MoveToDesk ,
6507
which moves a window to a different desktop.
6508
6509
The number of active desktops is determined dynamically.  Only
6510
desktops which contain windows or are currently being displayed
6511
are active.  Desktop numbers must be between 2147483647 and
6512
-2147483648 (is that enough?).
6513
6514
.TP
6515
.BI "GotoDeskAndPage " prev " | " "desk xpage ypage"
6516
Switches the current viewport to another desktop and page, similar
6517
to the
6518
.BR GotoDesk " and " GotoPage
6519
commands.  The new desk is
6520
.I desk
6521
and the new page is
6522
.RI ( xpage , ypage ).
6523
6524
.IP "\fBGotoPage\fP \fIprev\fP \
6525
\fB|\fP \fIx\fP \
6526
\fB[\fP \fIp\fP \
6527
\fB]\fP \fIy\fP \
6528
\fB[\fP \fIp\fP \
6529
\fB]\fP"
6530
Moves the desktop viewport to page (x,y).  The upper left page is
6531
(0,0), the upper right is (M,0), where M is one less than the
6532
current number of horizontal pages specified in the
6533
.B DeskTopSize
6534
command.  The lower left page is (0,N), and the lower right page
6535
is (M,N), where N is the desktop's vertical size as specified in
6536
the
6537
.B DeskTopSize
6538
command.  To switch to a page relative to the current one add a
6539
trailing
6540
.RI ' p '
6541
after any or both numerical arguments.  To go to last visited page
6542
use
6543
.I prev
6544
as the first argument.  The
6545
.B GotoPage
6546
function should not be used in a pop-up menu.
6547
6548
Examples:
6549
.EX
6550
# Go to page (2,3)
6551
GotoPage 2 3
6552
6553
# Go to lowest and rightmost page
6554
GotoPage -1 -1
6555
6556
# Go to last page visited
6557
GotoPage prev
6558
6559
# Go two pages to the right and one page up
6560
GotoPage +2p -1p
6561
.EE
6562
6563
.IP "\fBScroll\fP \fIhorizonal\fP \
6564
\fB[\fP \fIp\fP \
6565
\fB]\fP \fIvertical\fP \
6566
\fB[\fP \fIp\fP \
6567
\fB]\fP"
6568
Scrolls the virtual desktop's viewport by
6569
.I horizontal
6570
pages in the x-direction and
6571
.I vertical
6572
pages in the y-direction.  Either or both entries may be negative.
6573
Both
6574
.IR horizontal " and " vertical
6575
values are expressed in percent of pages, so
6576
.EX
6577
Scroll 100 100
6578
.EE
6579
means to scroll down and left by one full page.
6580
.EX
6581
Scroll 50 25
6582
.EE
6583
means to scroll left half a page and down a quarter of a page.
6584
The
6585
.B Scroll
6586
function should not be called from pop-up menus.  Normally,
6587
scrolling stops at the edge of the desktop.
6588
6589
If the
6590
.IR horizontal " and " vertical
6591
percentages are multiplied by 1000 then scrolling wraps around at
6592
the edge of the desktop.  If
6593
.EX
6594
Scroll 100000 0
6595
.EE
6596
is executed over and over fvwm moves to the next desktop page on
6597
each execution and wraps around at the edge of the desktop, so
6598
that every page is hit in turn.
6599
6600
If the letter
6601
.RI ' p '
6602
is appended to each coordinate
6603
.RI ( horizontal " and/or " vertical ),
6604
then the scroll amount is measured in pixels.
6605
6606
.TP
6607
.BI "Xinerama " bool
6608
Enables Xinerama support if the boolean argument is true and
6609
disables it if the argument is false.  Calling this command
6610
without arguments turns on Xinerama support it was disabled before
6611
and turns it off if it was enabled.  For example:
6612
.EX
6613
# Turn Xinerama support on, use primary screen 2
6614
XineramaPrimaryScreen 2
6615
Xinerama on
6616
#Turn it off again
6617
Xinerama off
6618
.EE
6619
6620
.TP
6621
.BI "XineramaPrimaryScreen [" primary-screen "]"
6622
Takes an integer number or 'g' or 'c' as its argument.  A number
6623
is taken as the number of the Xinerama screen that is to be used
6624
as the primary screen.  The primary screen can be used as the
6625
preferred screen to place windows with
6626
.EX
6627
XineramaPrimaryScreen <screen number>
6628
Style * StartsOnScreen p
6629
.EE
6630
The primary screen is used in some of the modules and for the
6631
default icon box too.  Any number that is zero or more is taken as
6632
the primary screen's number.  Instead, the letter 'c' indicates to
6633
use the curent screen (containing the pointer) whenever the
6634
primary screen is used.  This may be very confusing under some
6635
circumstances.  With
6636
'g', the global screen is used as the primary screen, effectively
6637
disabling the primary screen.  Calling this function with any
6638
other argument (including none) resets the primary screen to 0.
6639
6640
.TP
6641
.BI "XineramaSls [" bool "]"
6642
For multi-screen implementations other than Xinerama, such as
6643
Single Logical Screen, it is possible to simulate a Xinerama
6644
configuration if the total screen seen by FVWM is made up of
6645
equal sized monitors in a rectangular grid.  The
6646
.B XineramaSls
6647
command turns SLS support on or off or toggles it to the opposite
6648
state, depending on if the boolean argument is "True", "False" or
6649
"toggle".  If no argument is given, this is treated like "toggle".
6650
The default layout uses 1 by one screens.  To configure the
6651
layout, use the
6652
.B XineramaSlsSize
6653
command.
6654
6655
.TP
6656
.BI "XineramaSlsSize " Horizontal x Vertical
6657
This command configures the layout of the Single Logical screen
6658
feature.  It takes two arguments,
6659
.IR Horizontal " and " Vertical
6660
which must be an integer value dividing evenly into the total
6661
desktop width, and height height.  For an example with two
6662
monitors side by side which appear as one screen through the
6663
X-Server with the right screen as the primary screen, use:
6664
.EX
6665
XineramaSlsSize 2x1
6666
XineramaSlsOn
6667
XineramaPrimaryScreen 1
6668
XineramaOn
6669
.EE
6670
6671
6672
.SS COMMANDS FOR USER FUNCTIONS AND SHELL COMMANDS
6673
6674
.IP "\fBAddToFunc [\fP \fIname\fP \
6675
\fB[\fP \fII\fP \
6676
\fB|\fP \fIM\fP \
6677
\fB|\fP \fIC\fP \
6678
\fB|\fP \fIH\fP \
6679
\fB|\fP \fID action\fP \
6680
\fB]]\fP"
6681
Begins or adds to a function definition.  Here is an example:
6682
.EX
6683
AddToFunc Move-or-Raise I Raise
6684
 + M Move
6685
 + D Lower
6686
.EE
6687
The function name is "Move-or-Raise", and could be invoked from a menu
6688
or a mouse binding or key binding:
6689
.EX
6690
Mouse 1 TS A Move-or-Raise
6691
.EE
6692
The
6693
.I name
6694
must not contain embedded whitespace.  No guarantees are made
6695
whether function names with embedded whitespace work or not.  This
6696
behaviour may also change in the future without further notice.
6697
The letter before the
6698
.I action
6699
tells what kind of action triggers the command which follows it.
6700
.RI ' I '
6701
stands for "Immediate", and is executed as soon as the function is
6702
invoked.
6703
.RI ' M '
6704
stands for "Motion", i.e. if the user starts moving the mouse.
6705
.RI ' C '
6706
stands for "Click", i.e., if the user presses and releases the
6707
mouse.
6708
.RI ' H '
6709
stands for "Hold", i.e. if the user presses a mouse button and
6710
holds it down for more than
6711
.B ClickTime
6712
milliseconds.
6713
.RI ' D '
6714
stands for "Double-click". The action
6715
.RI ' I '
6716
causes an action to be performed on the button-press, if the
6717
function is invoked with prior knowledge of which window to act
6718
on.
6719
6720
There is a number of predefined symbols that are replaced by
6721
certain values if they appear on the command line.  Please refer
6722
to the
6723
.B COMMAND EXPANSION
6724
section for details.
6725
6726
Examples:
6727
6728
If you call
6729
.EX
6730
Key F10 R A Function MailFunction \\
6731
  xmh "-font fixed"
6732
.EE
6733
and "MailFunction" is
6734
.EX
6735
AddToFunc MailFunction
6736
 + I Next ($0) Iconify off
6737
 + I Next (AcceptsFocus, $0) focus
6738
 + I None ($0) Exec exec $0 $1
6739
.EE
6740
Then the last line of the function becomes
6741
.EX
6742
 + I None (xmh) Exec exec xmh -font fixed
6743
.EE
6744
The expansion is performed as the function is executed, so you can
6745
use the same function with all sorts of different arguments.  You
6746
could use
6747
.EX
6748
Key F11 R A Function MailFunction \\
6749
  zmail "-bg pink"
6750
.EE
6751
in the same
6752
.IR .fvwm2rc ,
6753
if you wanted.  An example of using "$w" is:
6754
.EX
6755
AddToFunc PrintFunction
6756
 + I Raise
6757
 + I Exec xdpr -id $w
6758
.EE
6759
Note that "$$" is expanded to '$'.
6760
6761
Another example: bind right mouse button within the window button
6762
number 6 (this is a minimize button for the win95 theme) to
6763
iconify all windows of the same resource:
6764
.EX
6765
AddToFunc FuncIconifySameResource "I" \\
6766
  All ($r) Iconify on
6767
Mouse 3 6 A FuncIconifySameResource
6768
.EE
6769
6770
.TP
6771
.BI "Beep"
6772
As might be expected, this makes the terminal beep.
6773
6774
.TP
6775
.BI "DestroyFunc " function
6776
Deletes a function, so that subsequent references to it are no
6777
longer valid.  You can use this to change the contents of a
6778
function during a fvwm session.  The function can be rebuilt using
6779
.BR AddToFunc .
6780
.EX
6781
DestroyFunc PrintFunction
6782
.EE
6783
6784
.TP
6785
.BI "Echo " string
6786
Prints a message to
6787
.IR stderr .
6788
Potentially useful for debugging things in your
6789
.IR .fvwm2rc .
6790
.EX
6791
Echo Beginning style definitions...
6792
.EE
6793
6794
.TP
6795
.BI "Exec " command
6796
Executes
6797
.IR command .
6798
You should not use an ampersand '&' at the end of the command. You
6799
probably want to use an additional "exec" at the beginning of
6800
.IR command .
6801
Without that, the shell that fvwm invokes to run your command
6802
stays until the command exits.  In effect, you'll have twice as
6803
many processes running as you need.  Note that some shells are
6804
smart enough to avoid this, but it never hurts to include the
6805
"exec" anyway.
6806
6807
The following example binds function key
6808
.SM F1
6809
in the root window, with no modifiers, to the exec function. The
6810
program rxvt is started with an assortment of options.
6811
6812
.EX
6813
Key F1 R N Exec exec rxvt -fg yellow -bg blue \\
6814
  -e /bin/tcsh
6815
.EE
6816
Note that this function doesn't wait for
6817
.I command
6818
to complete, so things like:
6819
.EX
6820
Exec "echo AddToMenu ... > /tmp/file"
6821
Read /tmp/file
6822
.EE
6823
do not work reliably.
6824
6825
.TP
6826
.BI "ExecUseShell [" shell "]"
6827
Makes the
6828
.B Exec
6829
command use the specified shell, or the value of the
6830
.I $SHELL
6831
environment variable if no shell is specified, instead of the
6832
default Bourne shell
6833
.RI ( /bin/sh ).
6834
.EX
6835
ExecUseShell
6836
ExecUseShell /usr/local/bin/tcsh
6837
.EE
6838
6839
.TP
6840
.BI "Function " FunctionName
6841
Used to bind a previously defined function to a key or mouse
6842
button. The following example binds mouse button 1 to a function
6843
called "Move-or-Raise", whose definition was provided as an
6844
example earlier in this man page.  After performing this binding
6845
fvwm executes the "move-or-raise" function whenever button 1 is
6846
pressed in a window's title-bar.
6847
.EX
6848
Mouse 1 T A Function Move-or-Raise
6849
.EE
6850
The keyword
6851
.B Function
6852
may be omitted if
6853
.I FunctionName
6854
does not coincide with a fvwm built-in function name
6855
6856
.TP
6857
.BI "Nop"
6858
Does nothing.  This is used to insert a blank line or separator in a
6859
menu.  If the menu item specification is
6860
.EX
6861
Nop " "
6862
.EE
6863
then a blank line is inserted.  If it looks like
6864
.EX
6865
Nop ""
6866
.EE
6867
then a separator line is inserted.  Can also be used as the
6868
double-click action for
6869
.BR Menu " or " Popup .
6870
6871
.TP
6872
.BI "PipeRead " command " [" quiet "]"
6873
Causes fvwm to read commands from the output of the
6874
.IR command .
6875
This
6876
.I command
6877
is executed by
6878
.I /bin/sh
6879
as if you typed it on the command line.  If the command consists
6880
of more than one word it must be quoted.  Useful for building up
6881
dynamic menu entries based on a directories contents, for
6882
example. If the keyword
6883
.I Quiet
6884
follows the command no message is produced if the
6885
.I command
6886
is not found.
6887
6888
Example:
6889
.EX
6890
AddToMenu HomeDirMenu
6891
PipeRead 'for i in $HOME/*; \\
6892
  do echo "+ $i Exec xterm -e vi $i"; done'
6893
.EE
6894
6895
.TP
6896
.BI "Read " filename " [" quiet "]"
6897
Causes fvwm to read commands from the file named
6898
.IR filename .
6899
If the keyword
6900
.I Quiet
6901
follows the command no message is produced if the file is not
6902
found.  If the file name does not begin with a slash ('/'), fvwm
6903
looks in the user's data directory, then the system data
6904
directory.  The user's data directory is by default
6905
.IR $HOME/.fvwm .
6906
It can be overridden by exporting
6907
.I FVWM_USERDIR
6908
set to any other directory.
6909
6910
.TP
6911
.BI "SetEnv " "variable [value]"
6912
Set an environment variable to a new value, similar to the shell's
6913
export or setenv command.  The
6914
.I variable
6915
and its
6916
.I value
6917
are inherited by processes started directly by fvwm.  This can be
6918
especially useful in conjunction with the
6919
.B FvwmM4
6920
module.  For example:
6921
.EX
6922
SetEnv height HEIGHT
6923
.EE
6924
makes the FvwmM4-set variable
6925
.I HEIGHT
6926
usable by processes started by fvwm as the environment variable
6927
.IR $height .
6928
If
6929
.I value
6930
includes whitespace, you should enclose it in quotes.  If no
6931
.I value
6932
is given, the
6933
.I variable
6934
is deleted from the environment as if
6935
.B UnsetEnv
6936
had been called.
6937
6938
.TP
6939
.BI "Silent " command
6940
A number of built in functions require a window to operate on.  If
6941
no window was selected when such a function is invoked the user is
6942
asked to select a window.  Sometimes this behavior is unwanted,
6943
for example if the function was called by a module and the window
6944
that was selected at first does not exist anymore.  You can
6945
prevent this by putting
6946
.B Silent
6947
in front of the fvwm
6948
.IR command .
6949
If a function that needs a window is called with
6950
.B Silent
6951
without a window selected, it simply returns without doing
6952
anything. If
6953
.B Silent
6954
is used on a user defined function it affects all function and sub
6955
function calls until the original function exits.
6956
6957
Another usage of
6958
.B Silent
6959
is with binding commands
6960
.BR Key ", " PointerKey " and " Mouse ,
6961
this disables error messages.
6962
6963
Examples:
6964
.EX
6965
Silent Move 0 0
6966
Silent User_defined_function
6967
# don't complain on keabords without "Help" key
6968
Silent Key Help R A Popup HelpMenu
6969
.EE
6970
6971
.TP
6972
.BI "UnsetEnv " "variable"
6973
Unset an environment variable, similar to shell's export or
6974
unsetenv command. The
6975
.I variable
6976
then is removed from the environment array inherited by processes
6977
started directly by fvwm.
6978
6979
.TP
6980
.BI "Wait " windowname
6981
This built-in is intended to be used in fvwm functions only.  It
6982
causes execution of a function to pause until a new window with
6983
the title
6984
.I windowname
6985
appears.  Fvwm remains partially functional during a wait.  This
6986
is particularly useful in the "InitFunction" if you are trying to
6987
start windows on specific desktops:
6988
.EX
6989
AddToFunc InitFunction
6990
 + I exec xterm -geometry 80x64+0+0
6991
 + I Wait xterm
6992
 + I Desk 0 2
6993
 + I Exec exec xmh -font fixed -geometry \\
6994
       507x750+0+0
6995
 + I Wait xmh
6996
 + I Desk 0 0
6997
.EE
6998
The above function starts an xterm on the current desk, waits for
6999
it to map itself, then switches to desk 2 and starts an xmh.
7000
After the xmh window appears control moves to desk 0.
7001
7002
You can escape from a
7003
.B Wait
7004
pause by pressing
7005
.SM Ctrl-Alt-Escape
7006
(where
7007
.SM Alt
7008
is the first modifier).  To redefine this key sequence see the
7009
.B EscapeFunc
7010
command.
7011
7012
7013
.SS CONDITIONAL COMMANDS
7014
7015
.TP
7016
.BI "All [(" conditions ")] " command
7017
Execute.
7018
.I command
7019
on all windows meeting the conditions.
7020
.I Conditions
7021
are used exactly as with the
7022
.B Current
7023
command.
7024
7025
.TP
7026
.BI "Current [(" condition ... ")] " command
7027
Performs
7028
.I command
7029
on the currently focused window if it satisfies all
7030
.IR conditions .
7031
The
7032
.IR conditions
7033
are a list of keywords from the list below and are separated by
7034
commas or whitespace.  Conditions include
7035
"AcceptsFocus", "!AcceptsFocus"
7036
"Iconic", "!Iconic",
7037
"Visible", "!Visible",
7038
"Raised", "!Raised",
7039
"Layer [n]",
7040
"Sticky", "!Sticky",
7041
"Maximized", "!Maximized",
7042
"Shaded", "!Shaded",
7043
"Transient", "!Transient",
7044
"PlacedByButton3", "!PlacedByButton3",
7045
"PlacedByFvwm", "!PlacedByFvwm",
7046
"CurrentDesk", "CurrentPage", "CurrentScreen"
7047
"CurrentGlobalPage", "CurrentPageAnyDesk" and "CurrentGlobalPageAnyDesk".
7048
In addition, the
7049
.I condition
7050
may include one window name to match to.  The window name may
7051
include the wildcards '*' and '?'.  The window name, icon name,
7052
class, and resource are considered when attempting to find a
7053
match.  The window name can begin with '!' which prevents
7054
.I command
7055
if any of the window name, icon name, class or resource match.
7056
7057
The "AcceptsFocus" condition excludes all windows that do not want
7058
the input focus (the application has set the "Input hints" for the
7059
window to False) and do not use the
7060
.I Lenience
7061
option of the
7062
.B Style
7063
command.  Also, all windows using the
7064
.I NoFocus
7065
style are ignored.
7066
7067
The "CurrentDesk" condition excludes all window that are not on
7068
the current desk.
7069
7070
The "CurrentPage" condition excludes all window that are not on
7071
the current desk or not on the current page. If Xinerama support
7072
is enabled, only windows on the screen that contains the mouse
7073
pointer are considered to match.
7074
7075
The "CurrentGlobalPage" condition excludes all window that are not
7076
on the current desk or not on the current page. The screen does
7077
not matter if Xinerama support is enabled.
7078
7079
The "CurrentScreen" and "CurrentPageAnyDesk" conditions exclude
7080
all window that are not on the current page but that may be on any
7081
desk.
7082
7083
The "CurrentGlobalPage" condition excludes all window that are not
7084
on the current desk or not on the current page. If Xinerama
7085
support is enabled, only windows on the screen that contains the
7086
mouse pointer are considered to match.
7087
7088
The "CurrentGlobalPageAnyDesk" condition excludes all window that
7089
are not on the current page but that may be on any desk.  The
7090
screen does not matter if Xinerama support is enabled.
7091
7092
The argument of the "Layer" condition defaults to the layer of the
7093
focus window.
7094
7095
The "PlacedByButton3" condition is fulfilled if the last
7096
interactive motion of the window (with the
7097
.B Move
7098
command) was ended by pressing mouse button 3.  This is especially
7099
useful with the
7100
.I ManualPlacement
7101
option of the
7102
.B Style
7103
command.
7104
7105
The "PlacedByFvwm" condition excludes all windows that have been placed
7106
manually or by using the user or program position hint.
7107
7108
Note that earlier versions of fvwm required the conditions to be
7109
enclosed in brackets instead of parentheses (this is still
7110
supported for backwards compatibility).
7111
7112
.TP
7113
.BI "Direction " direction " [(" conditions ")] " command
7114
Performs
7115
.I command
7116
(typically
7117
.BR Focus )
7118
on a window in the given direction which satisfies all
7119
.IR conditions .
7120
Conditions are the same as for
7121
.BR Current .
7122
The
7123
.I direction
7124
may be one of "North", "Northeast", "East", "Southeast", "South",
7125
"Southwest", "West" and "Northwest".  Which window
7126
.B Direction
7127
selects depends on angle and distance between the center points of
7128
the windows.  Closer windows are considered a better match than
7129
those farther away.
7130
7131
.TP
7132
.BI "Next [(" conditions ")] " command
7133
Performs
7134
.I command
7135
(typically
7136
.BR Focus )
7137
on the next window which satisfies all
7138
.IR conditions .
7139
Conditions are the same as for
7140
.B Current
7141
with the addition of "CirculateHit" which overrides the
7142
.IB "CirculateSkip " Style
7143
attribute, "CirculateHitIcon" which overrides the
7144
.IB "CirculateSkipIcon " Style
7145
attribute for iconified windows and "CirculateHitShaded" which
7146
does the same for shaded windows.
7147
7148
.TP
7149
.BI "None [(" conditions ")] " command
7150
Performs
7151
.I command
7152
if no window which satisfies all
7153
.I conditions
7154
exists.  Conditions are the same as for
7155
.BR Next .
7156
7157
.TP
7158
.BI "Pick [(" conditions ")] " command
7159
.B Pick
7160
works like
7161
.B Function
7162
if invoked in the context of a window.  If invoked in the root
7163
window, it first asks the user to pick a window and then executes the
7164
.I command
7165
in the context of that window.  This avoids annoying multiple
7166
selections with complex functions.  The command is executed only
7167
if the given
7168
.I conditions
7169
are met.  The conditions are the same as for
7170
.BR Next .
7171
7172
.TP
7173
.BI "Prev [(" conditions ")] " command
7174
Performs
7175
.I command
7176
(typically
7177
.BR Focus )
7178
on the previous window which satisfies all
7179
.IR conditions .
7180
Conditions are the same as for
7181
.BR Next .
7182
7183
.TP
7184
.BI "ThisWindow [(" conditions ")] " command
7185
.B ThisWindow
7186
executes the specified
7187
.I command
7188
in the context of the current operand window.  If there is no
7189
operand window (it is invoked in the root window), the command is
7190
ignored.
7191
.B ThisWindow
7192
is always non-interactive.  The command is executed only if the
7193
given
7194
.I conditions
7195
are met.  The conditions are the same as for
7196
.BR Current .
7197
It returns -1 if used outside a window context.
7198
7199
.IP "\fBWindowId [\fP \fIid\fP \
7200
\fB] [(\fP \fIconditions\fP \
7201
\fB)] | [\fP \fIroot\fP \
7202
\fB[\fP \fIscreen\fP \
7203
\fB]]\fP \fIcommand"
7204
The
7205
.B WindowId
7206
function is similar to the
7207
.BR Next " and " Prev
7208
functions, except that it looks for a specific window
7209
.I id
7210
and runs the specified
7211
.I command
7212
on it.  The optional
7213
.I conditions
7214
are the same as for
7215
.BR Current .
7216
The second form of syntax retrieves the window id of the root
7217
window of the given
7218
.IR screen .
7219
If no
7220
.I screen
7221
is given, the current screen is assumed.  The window indicated by
7222
.I id
7223
may belong to a window not managed by fvwm or even a window on a
7224
different screen.  Although most commands can not operate on such
7225
windows, there are some exceptions, for example the
7226
.B WarpToWindow
7227
command.
7228
.EX
7229
WindowId 0x34567890 Raise
7230
WindowId root 1 WarpToWindow 50 50
7231
WindowId $0 (Silly_Popup) Delete
7232
.EE
7233
Mostly this is useful for functions used with the
7234
.B WindowList
7235
built-in, or for selective processing of
7236
.B FvwmEvent
7237
calls (as in the last example).
7238
7239
7240
.SS MODULE COMMANDS
7241
7242
Fvwm maintains a database of module configuration lines in a form
7243
.EX
7244
.BI "*" "<ModuleName>" ": " "<Config-Resource>"
7245
.EE
7246
where
7247
.I "<ModuleName>"
7248
is either a real module name or an alias.
7249
7250
This database is initially filled from config file (or from
7251
output of
7252
.B \-cmd
7253
config command), and can be later modified either by user (via
7254
.BR FvwmCommand )
7255
or by modules.
7256
7257
When modules are run, they read appropriate portion of database.
7258
(The concept of this database is similar to one used in X resource
7259
database).
7260
7261
Commands for manipulating module configuration database are
7262
described below.
7263
7264
.TP
7265
.BI "*" module_config_line
7266
Defines a module configuration.
7267
.I module_config_line
7268
consists of a module name (or a module alias) and a module
7269
resource line. The new syntax allows a delimiter, a colon and
7270
optional spaces, between the module name and the rest of the line,
7271
this is recommended to avoid conflicts.
7272
.EX
7273
*FvwmIconBox: MaxIconSize 48x48
7274
*FvwmPager: WindowBorderWidth 1
7275
*FvwmButtons-TopRight: Geometry 100x100-0+0
7276
*FvwmButtons-Bottom: Geometry +0-0
7277
.EE
7278
7279
.TP
7280
.BI "DestroyModuleConfig " module_config
7281
Deletes module configuration entries, so that new configuration
7282
lines may be entered instead.  This also sometimes the only way to
7283
turn back some module settings, previously defined.  This changes
7284
the way a module runs during a fvwm session without
7285
restarting.  Wildcards can be used for portions of the name as
7286
well.
7287
7288
The new non-conflicting syntax allows a delimiter, a colon and
7289
optional spaces between the module name and the rest of the line.
7290
In this case a module name (or alias) can't have wildcards.
7291
.EX
7292
DestroyModuleConfig FvwmButtons*
7293
DestroyModuleConfig FvwmForm: Fore
7294
DestroyModuleConfig FvwmIconBox: Max*
7295
.EE
7296
7297
.TP
7298
.BI "KillModule " modulename " [" modulealias ]
7299
Causes the module which was invoked with name
7300
.I modulename
7301
to be killed.  The name may include wildcards. If
7302
.I modulealias
7303
is given, only modules started with the given alias are killed.
7304
.EX
7305
KillModule FvwmPager  # kill all pagers
7306
7307
Module FvwmEvent SoundEvent
7308
KillModule FvwmEvent SoundEvent
7309
.EE
7310
7311
.TP
7312
.BI "Module " modulename " [" moduleparams ]
7313
Specifies a module with its optional parameters which should be
7314
spawned. Currently several modules, including
7315
.BR FvwmButtons ", " FvwmEvent ", " FvwmForm ", " FvwmGtk ", "
7316
.BR FvwmPager ", " FvwmScript
7317
support aliases.  Aliases are useful if more than one instance of
7318
the module should be spawned.  Aliases may be configured
7319
separately using
7320
.B *
7321
syntax described above.  To start a module
7322
.B FvwmForm
7323
using an alias
7324
.IR MyForm ,
7325
the following syntax may be used:
7326
.EX
7327
Module FvwmForm MyForm
7328
.EE
7329
7330
At the current time the available modules (included with fvwm) are
7331
.B FvwmAnimate
7332
(produces animation effects when a window is iconified or
7333
de-iconifed),
7334
.B FvwmAudio
7335
(makes sounds to go with window manager actions),
7336
.B FvwmAuto
7337
(an auto raise module),
7338
.B FvwmBacker
7339
(to change the background when you change desktops),
7340
.B FvwmBanner
7341
(to display a spiffy XPM),
7342
.B FvwmButtons
7343
(brings up a customizable tool bar),
7344
.B FvwmCommandS
7345
(a command server to use with shell's FvwmCommand client),
7346
.B FvwmConsole
7347
(to execute fvwm commands directly),
7348
.B FvwmCpp
7349
(to preprocess your
7350
.I .fvwm2rc
7351
with cpp),
7352
.B FvwmDebug
7353
(to help debug fvwm),
7354
.B FvwmDragWell
7355
(the place to drag&drop to),
7356
.B FvwmEvent
7357
(trigger various actions by events),
7358
.B FvwmForm
7359
(to bring up dialogs),
7360
.B FvwmGtk
7361
(to bring up GTK menus and dialogs),
7362
.B FvwmIconBox
7363
(like the mwm IconBox),
7364
.B FvwmIconMan
7365
(a flexible icon manager),
7366
.B FvwmIdent
7367
(to get window info),
7368
.B FvwmM4
7369
(to preprocess your
7370
.I .fvwm2rc
7371
with m4),
7372
.B FvwmPager
7373
(a mini version of the desktop),
7374
.B FvwmSave
7375
(saves the desktop state in .xinitrc style),
7376
.B FvwmSaveDesk
7377
(saves the desktop state in fvwm commands),
7378
.B FvwmScript
7379
(another powerful dialog toolkit),
7380
.B FvwmScroll
7381
(puts scrollbars on any window),
7382
.B FvwmTaskBar
7383
(a Windows like task bar),
7384
.B FvwmTheme
7385
(manages colorsets, see below),
7386
.B FvwmWinList
7387
(a window list),
7388
.B FvwmWharf
7389
(an AfterStep like button bar).
7390
These modules have their own man pages.  There may be other
7391
modules out on there as well.
7392
7393
Note,
7394
.B FvwmTheme
7395
is a special module which manages colorsets. Most of other modules
7396
and fvwm itself support colorsets and changing colors
7397
dynamically. Colorsets will probably be the only method to specify
7398
colors in the next stable fvwm release, and then the functionality
7399
of FvwmTheme will be moved to the core fvwm.
7400
7401
7402
Modules can be short lived transient programs or, like
7403
.BR FvwmButtons ,
7404
can remain for the duration of the X session.  Modules are
7405
terminated by the window manager prior to restarts and quits, if
7406
possible.  See the introductory section on modules.  The keyword
7407
.B Module
7408
may be omitted if
7409
.I modulename
7410
is distinct from all built-in and function names.
7411
7412
.TP
7413
.BI "ModulePath " path
7414
Specifies a colon separated list of directories in which to search
7415
for modules.  To find a module, fvwm searches each directory in
7416
turn and uses the first file found.  Directory names on the list
7417
do not need trailing slashes.
7418
7419
The
7420
.BI ModulePath
7421
may contain environment variables such as
7422
.IR $HOME " (or " ${HOME} ).
7423
Further, a '+' in the
7424
.I path
7425
is expanded to the previous value of the
7426
.IR path ,
7427
allowing easy appending or prepending to the
7428
.IR path .
7429
7430
For example:
7431
.EX
7432
ModulePath ${HOME}/lib/fvwm/modules:+
7433
.EE
7434
The directory containing the standard modules is available via the
7435
environment variable
7436
.IR $FVWM_MODULEDIR .
7437
7438
.TP
7439
.BI "ModuleSynchronous  [" "Expect string" "] [" "Timeout secs" "] " modulename
7440
The
7441
.B ModuleSynchronous
7442
command is very similar to
7443
.BI Module .
7444
Fvwm stops processing any commands and user input until the module
7445
sends a string beginning with "NOP FINISHED STARTUP" back to fvwm.
7446
If the optional
7447
.I Timeout
7448
is given fvwm gives up if the module sent no input back to fvwm
7449
for
7450
.I secs
7451
seconds.  If the
7452
.I Expect
7453
option is given, fvwm waits for the given
7454
.I string
7455
instead.
7456
.B ModuleSynchronous
7457
should only be used during fvwm startup to enforce the order in
7458
which modules are started.  This command is intended for use with
7459
the
7460
.B FvwmTheme
7461
module since the configuration must be in place before any other
7462
modules are started.
7463
7464
Warning: It is quite easy to hang fvwm with this command, even if
7465
a timeout is given.  Be extra careful choosing the string to wait
7466
for. Although all modules in the fvwm distribution send back the
7467
"NOP FINISHED STARTUP" string once they have properly started up,
7468
this may not be the case for third party modules.  Moreover, you
7469
can try to escape from a locked
7470
.B ModuleSynchronous
7471
command by using the key sequence
7472
.SM Ctrl-Alt-Escape
7473
(see the
7474
.BR EscapeFunc ).
7475
7476
.TP
7477
.BI "ModuleTimeout " timeout
7478
Specifies how many seconds fvwm waits for a module to respond. If
7479
the module does not respond within the time limit then fvwm kills
7480
it.
7481
.I timeout
7482
must be greater than zero, or it is reset to the default value of
7483
30 seconds.
7484
7485
.TP
7486
.BI "SendToModule " "modulename string"
7487
Sends an arbitrary string (no quotes required) to all modules,
7488
whose alias or name matching
7489
.IR modulename ,
7490
which may contain wildcards.  This only makes sense if the module
7491
is set up to understand and deal with these strings though. Can be
7492
used for module to module communication, or implementation of more
7493
complex commands in modules.
7494
7495
7496
.SS QUIT, RESTART AND SESSION MANAGEMENT COMMANDS
7497
7498
.TP
7499
.BI "Quit"
7500
Exits fvwm, generally causing X to exit too.
7501
7502
.TP
7503
.BI "QuitScreen"
7504
Causes fvwm to stop managing the screen on which the command was
7505
issued.
7506
7507
.TP
7508
.BI "QuitSession"
7509
Causes a session manager (if any) to shutdown the session.  This
7510
command does not work for xsm, it seems that xsm does not
7511
implement this functionality.  Use Unix signals to manage xsm
7512
remotely.
7513
7514
.TP
7515
.BI "Restart [" window_manager " [" params "]]"
7516
Causes fvwm to restart itself if
7517
.I window_manager
7518
is left blank, or to switch to an alternate window manager (or
7519
other fvwm version) if
7520
.I window_manager
7521
is specified.  If the window manager is not in your default search
7522
path, then you should use the full path name for
7523
.IR window_manager .
7524
7525
This command should not have a trailing ampersand.  The command
7526
can have optional parameters with simple shell-like syntax.  You
7527
can use
7528
.I ~
7529
(is expanded to the user home directory) and environmental
7530
variables .IR $VAR " or " ${VAR} . Here are several examples:
7531
.EX
7532
Key F1 R N Restart
7533
Key F1 R N Restart fvwm2 -s
7534
Key F1 R N Restart ~/bin/fvwm2 -f $HOME/.fvwm/main
7535
Key F1 R N Restart fvwm1 -s -f .fvwm1rc
7536
Key F1 R N Restart xterm -n '"X console"' \\
7537
  -T \\"X\\ console\\" -e fvwm1 -s
7538
.EE
7539
If you need a native restart, we suggest only to use
7540
.B Restart
7541
command without parameters unless there is a reason not to. If you
7542
use 'Restart fvwm2', all current command line arguments are lost,
7543
while on Restart without parameters or with --pass-args, they are
7544
preserved. Here are some cases when 'Restart fvwm2' causes
7545
troubles:
7546
.EX
7547
* running fvwm under a session manager
7548
* running fvwm with multi headed displays
7549
* having command line arguments, like -f themes-rc or -cmd
7550
* if the first fvwm2 in the $PATH is a different one
7551
.EE
7552
This is why we are issuing a warning on an old usage. If you
7553
really want to restart to fvwm2 with no additional arguments, you
7554
may get rid of this warning by using "Restart fvwm2 -s" or
7555
"Restart /full/path/fvwm2".
7556
7557
Note, currently with multi headed displays, restart of fvwms on
7558
different screens works independently.
7559
7560
.TP
7561
.BI "Restart " "--pass-args window_manager"
7562
The same as
7563
.B Restart
7564
without parameters but the name for the current window manager is
7565
replaced with the specified
7566
.I window_manager
7567
and original arguments are preserved.
7568
7569
This command is useful if you use initial arguments like
7570
.EX
7571
-cmd FvwmCpp
7572
.EE
7573
and want to switch to another fvwm version without losing the
7574
initial arguments.
7575
7576
.TP
7577
.BI "Restart " --dont-preserve-state " [" other-params "]"
7578
The same as
7579
.EX
7580
.BI "Restart [" other-params "]"
7581
.EE
7582
but it does not save any window states over the restart.
7583
7584
Without this option,
7585
.B Restart
7586
preserves most per-window state by writing it to a file named
7587
.I .fs-restart-$HOSTDISPLAY
7588
in the user's home directory.
7589
7590
.TP
7591
.BI "SaveSession"
7592
Causes a session manager (if any) to save the session.  This
7593
command does not work for xsm, it seems that xsm does not
7594
implement this functionality.  Use Unix signals to manage xsm
7595
remotely.
7596
7597
.TP
7598
.BI "SaveQuitSession"
7599
Causes a session manager (if any) to save and then shutdown the
7600
session. This command does not work for xsm, it seems that xsm
7601
does not implement this functionality.  Use Unix signals to manage
7602
xsm remotely.
7603
7604
7605
.SS COLOR GRADIENTS
7606
7607
A color gradient is a background that changes its color gradually
7608
from one hue to a different one.  Color gradients can be used by
7609
various commands and modules of fvwm.  There are eight types of
7610
gradients:
7611
.B HGradient
7612
is a horizontal gradient,
7613
.B VGradient
7614
is vertical,
7615
.B DGradient
7616
is diagonal from top left to bottom right,
7617
.B BGradient
7618
is backwards diagonal from bottom left to top right,
7619
.B SGradient
7620
is concentric squares,
7621
.B CGradient
7622
is concentric circles,
7623
.B RGradient
7624
is a radar like pattern and
7625
.B YGradient
7626
is a Yin Yang style (but without the dots).
7627
7628
The color gradient syntax has two forms:
7629
7630
.TP
7631
.BI "?Gradient " "colors start-color end-color"
7632
This form specifies a linear gradient.  The arguments denote the
7633
total number of
7634
.I colors
7635
to allocate (between 2 and 1000), the initial color and the final color.
7636
7637
Example:
7638
.EX
7639
TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
7640
.EE
7641
7642
.TP
7643
.BI "?Gradient " "colors segments color length color" " [" "length color" "] ..."
7644
The second form specifies a nonlinear gradient.  The arguments are:
7645
the total number of
7646
.I colors
7647
to allocate (between 2 and 1000), then the number of
7648
.IR segments .
7649
For each segment, specify the starting
7650
.IR color ,
7651
a relative
7652
.IR length ,
7653
then the ending color.  Each subsequent segment begins with the
7654
second color of the last segment.  The lengths may be any
7655
non-negative integers.  The length of one segment divided by the
7656
sum of all segment's lengths is the fraction of the colors that
7657
are used for the segment.
7658
.in -2
7659
7660
Examples:
7661
.EX
7662
MenuStyle * MenuFace DGradient \\
7663
  128 2 lightgrey 50 blue 50 white
7664
7665
# 20% gradient from red to blue,
7666
# 30% from blue to black,
7667
# 50% from black to grey
7668
MenuStyle * DGradient 100 3 Red 20 Blue 30 \\
7669
  Black 50 Grey
7670
7671
# 50% from blue to green, then
7672
# 50% from yellow to red
7673
*FvwmTheme: Colorset 0 Blue Red HGradient \\
7674
  128 3 Blue 1000 Green 1 Yellow 1000 Red
7675
.EE
7676
7677
.SH ENVIRONMENT
7678
7679
.TP
7680
.I DISPLAY
7681
Fvwm starts on this display unless the
7682
.I -display
7683
option is given.
7684
.TP
7685
.I FVWM_MODULEDIR
7686
Set by fvwm to the directory containing the standard fvwm modules.
7687
.TP
7688
.I FVWM_USERDIR
7689
Used to determine the user's data directory for reading and
7690
sometimes writing personal files. If this variable is not already
7691
set, it is set by fvwm to $HOME/.fvwm, which is the default user's
7692
data directory.
7693
.TP
7694
.I SESSION_MANAGER
7695
Fvwm tries to contact this session manager.
7696
.TP
7697
.I SESSION_MANAGER_NAME
7698
This is used mainly to determine xsm running to work around its
7699
bug. If this variable is set to "xsm", DiscardCommand is set as
7700
xsm expects it and not as XSMP requires.  If you run fvwm under
7701
xsm, you should set this variable to "xsm", otherwise old state
7702
files are not removed.
7703
.TP
7704
.I SM_SAVE_DIR
7705
If this is set, fvwm saves its session data in this
7706
directory. Otherwise it uses
7707
.IR $HOME .
7708
Note, the state files are named
7709
.I .fs-??????
7710
and normally are removed automatically when not used anymore.
7711
7712
.SH AUTHORS
7713
7714
Robert Nation with help from many people, based on twm code, which
7715
was written by Tom LaStrange.  After Robert Nation came Charles
7716
Hines, followed by Brady Montz. Currently fvwm is developed by a
7717
number of people on the fvwm-workers mailing list.
7718
7719
.SH COPYRIGHT
7720
7721
Fvwm and all the modules, scripts and other files coming with the
7722
distribution are subject to the GNU General Public License
7723
(GPL). Please refer to the
7724
.I COPYING
7725
file that came with fvwm for details.
7726
7727
.SH BUGS
7728
7729
As of fvwm version 2.4.0 there were exactly 71.8 unidentified
7730
bugs. Since then 22.825 bugs have been fixed.  Assuming that there
7731
are at least 10 unidentified bugs for every identified one, that
7732
leaves us with 71.8 - 22.825 + 10 * 22.825 = 277.225 unidentified
7733
bugs. If we follow this to its logical conclusion we will have an
7734
infinite number of unidentified bugs before the number of bugs can
7735
start to diminish, at which point the program will be bug-free.
7736
Since this is a computer program infinity = 3.4028e+38 if you
7737
don't insist on double-precision.  At the current rate of bug
7738
discovery we should expect to achieve this point in 4.27e+27
7739
years.  I guess we better plan on passing this thing on to our
7740
children...
7741
7742
Known bugs can be found in the fvwm bug tracking system
7743
(accessible from the fvwm home page) and in the
7744
.IR BUGS " or " TODO
7745
files in the distribution.  These files are no longer maintained
7746
and may be out of date.
7747
7748
Bug reports can be sent to the fvwm-workers mailing list (see the
7749
.IR FAQ )
7750
or reported through the bug tracking system.
7751
7752
The official fvwm homepage is
7753
.BR http://www.fvwm.org/ .
7754
7755
\" LocalWords:  XTerm xterm rc fvwm Linux ICCCM CDE XView XINERAMA Xinerama
7756
\"  LocalWords:  EdgeResistance fvwm's IconBox MoveToScreen FvwmConsole
7757
\"  LocalWords:  FvwmCommand
(-)fvwm-2.4.7.orig/fvwm/screen.h (+14 lines)
Lines 54-59 Link Here
54
#define COLORMAP_FOLLOWS_MOUSE 1 /* default */
54
#define COLORMAP_FOLLOWS_MOUSE 1 /* default */
55
#define COLORMAP_FOLLOWS_FOCUS 2
55
#define COLORMAP_FOLLOWS_FOCUS 2
56
56
57
#ifdef FANCY_TITLEBARS
58
#define TITLE_PADDING 5
59
enum tb_pixmap_enum {TBP_MAIN, TBP_LEFT_MAIN, TBP_RIGHT_MAIN, TBP_UNDER_TEXT,
60
                     TBP_LEFT_OF_TEXT, TBP_RIGHT_OF_TEXT, TBP_LEFT_END,
61
                     TBP_RIGHT_END, TBP_BUTTONS, TBP_LEFT_BUTTONS,
62
                     TBP_RIGHT_BUTTONS, NUM_TB_PIXMAPS};
63
#endif
57
64
58
typedef struct
65
typedef struct
59
{
66
{
Lines 70-75 Link Here
70
    GradientButton            ,
77
    GradientButton            ,
71
    PixmapButton              ,
78
    PixmapButton              ,
72
    TiledPixmapButton         ,
79
    TiledPixmapButton         ,
80
#ifdef FANCY_TITLEBARS
81
    MultiPixmap               ,
82
#endif
73
#ifdef MINI_ICONS
83
#ifdef MINI_ICONS
74
    MiniIconButton            ,
84
    MiniIconButton            ,
75
#endif
85
#endif
Lines 123-128 Link Here
123
  struct
133
  struct
124
  {
134
  {
125
    Picture *p;
135
    Picture *p;
136
#ifdef FANCY_TITLEBARS
137
    Picture **multi_pixmaps;
138
    short multi_stretch_flags;
139
#endif
126
    Pixel back;
140
    Pixel back;
127
    struct
141
    struct
128
    {
142
    {

Return to bug 2951