gram.y revision 0bbfda8a
1645f5050Syouri/* 20bbfda8aSnia * Copyright 1988 by Evans & Sutherland Computer Corporation, 30bbfda8aSnia * Salt Lake City, Utah 40bbfda8aSnia * Portions Copyright 1989 by the Massachusetts Institute of Technology 50bbfda8aSnia * Cambridge, Massachusetts 6645f5050Syouri * 70bbfda8aSnia * Copyright 1992 Claude Lecommandeur. 8645f5050Syouri */ 9645f5050Syouri 10645f5050Syouri/*********************************************************************** 11645f5050Syouri * 12645f5050Syouri * $XConsortium: gram.y,v 1.91 91/02/08 18:21:56 dave Exp $ 13645f5050Syouri * 14645f5050Syouri * .twmrc command grammer 15645f5050Syouri * 16645f5050Syouri * 07-Jan-86 Thomas E. LaStrange File created 17645f5050Syouri * 11-Nov-90 Dave Sternlicht Adding SaveColors 18645f5050Syouri * 10-Oct-90 David M. Sternlicht Storing saved colors on root 19645f5050Syouri * 22-April-92 Claude Lecommandeur modifications for ctwm. 20645f5050Syouri * 21645f5050Syouri ***********************************************************************/ 22645f5050Syouri 23645f5050Syouri%{ 240bbfda8aSnia#include "ctwm.h" 250bbfda8aSnia 26645f5050Syouri#include <stdio.h> 270bbfda8aSnia#include <string.h> 280bbfda8aSnia#include <strings.h> 290bbfda8aSnia 300bbfda8aSnia#include "otp.h" 310bbfda8aSnia#include "iconmgr.h" 32645f5050Syouri#include "icons.h" 33645f5050Syouri#include "windowbox.h" 340bbfda8aSnia#include "functions_defs.h" 35645f5050Syouri#include "list.h" 36645f5050Syouri#include "util.h" 370bbfda8aSnia#include "occupation.h" 38645f5050Syouri#include "screen.h" 39645f5050Syouri#include "parse.h" 400bbfda8aSnia#include "parse_be.h" 410bbfda8aSnia#include "parse_yacc.h" 42645f5050Syouri#include "cursor.h" 430bbfda8aSnia#include "win_decorations_init.h" 440bbfda8aSnia#include "win_regions.h" 450bbfda8aSnia#include "workspace_config.h" 460bbfda8aSnia#ifdef SOUNDS 470bbfda8aSnia# include "sound.h" 48645f5050Syouri#endif 49645f5050Syouri 500bbfda8aSniastatic char *curWorkSpc = NULL; 510bbfda8aSniastatic char *client = NULL; 520bbfda8aSniastatic char *workspace = NULL; 530bbfda8aSniastatic MenuItem *lastmenuitem = NULL; 540bbfda8aSniastatic name_list **curplist = NULL; 550bbfda8aSniastatic int color = 0; 560bbfda8aSniaextern char *yytext; // Have to manually pull this in 570bbfda8aSnia 580bbfda8aSniaint yylex(void); 59645f5050Syouri%} 60645f5050Syouri 61645f5050Syouri%union 62645f5050Syouri{ 63645f5050Syouri int num; 64645f5050Syouri char *ptr; 65645f5050Syouri}; 66645f5050Syouri 67645f5050Syouri 68645f5050Syouri%token <num> LB RB LP RP MENUS MENU BUTTON DEFAULT_FUNCTION PLUS MINUS 69645f5050Syouri%token <num> ALL OR CURSORS PIXMAPS ICONS COLOR SAVECOLOR MONOCHROME FUNCTION 70645f5050Syouri%token <num> ICONMGR_SHOW ICONMGR ALTER WINDOW_FUNCTION ZOOM ICONMGRS 71645f5050Syouri%token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE 72645f5050Syouri%token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING 730bbfda8aSnia%token <num> AUTO_POPUP 74645f5050Syouri%token <num> NO_BORDER NO_ICON_TITLE NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION 75645f5050Syouri%token <num> WINDOW_REGION META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME 76645f5050Syouri%token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE 770bbfda8aSnia%token <num> WARP_ON_DEICONIFY 78645f5050Syouri%token <num> START_ICONIFIED NO_TITLE_HILITE TITLE_HILITE 79645f5050Syouri%token <num> MOVE RESIZE WAITC SELECT KILL LEFT_TITLEBUTTON RIGHT_TITLEBUTTON 80645f5050Syouri%token <num> NUMBER KEYWORD NKEYWORD CKEYWORD CLKEYWORD FKEYWORD FSKEYWORD 810bbfda8aSnia%token <num> FNKEYWORD PRIORITY_SWITCHING PRIORITY_NOT_SWITCHING 820bbfda8aSnia%token <num> SKEYWORD SSKEYWORD WINDOW_RING WINDOW_RING_EXCLUDE WARP_CURSOR ERRORTOKEN 830bbfda8aSnia%token <num> GRAVITY /* N/S/E/W */ 840bbfda8aSnia%token <num> SIJENUM /* SqueezeTitle justifications, SIJust enum */ 85645f5050Syouri%token <num> NO_STACKMODE ALWAYS_ON_TOP WORKSPACE WORKSPACES WORKSPCMGR_GEOMETRY 86645f5050Syouri%token <num> OCCUPYALL OCCUPYLIST MAPWINDOWCURRENTWORKSPACE MAPWINDOWDEFAULTWORKSPACE 870bbfda8aSnia%token <num> ON_TOP_PRIORITY 88645f5050Syouri%token <num> UNMAPBYMOVINGFARAWAY OPAQUEMOVE NOOPAQUEMOVE OPAQUERESIZE NOOPAQUERESIZE 89645f5050Syouri%token <num> DONTSETINACTIVE CHANGE_WORKSPACE_FUNCTION DEICONIFY_FUNCTION ICONIFY_FUNCTION 90645f5050Syouri%token <num> AUTOSQUEEZE STARTSQUEEZED DONT_SAVE AUTO_LOWER ICONMENU_DONTSHOW WINDOW_BOX 91645f5050Syouri%token <num> IGNOREMODIFIER WINDOW_GEOMETRIES ALWAYSSQUEEZETOGRAVITY VIRTUAL_SCREENS 920bbfda8aSnia%token <num> IGNORE_TRANSIENT 930bbfda8aSnia%token <num> EWMH_IGNORE 940bbfda8aSnia%token <num> MWM_IGNORE 950bbfda8aSnia%token <num> RPLAY_SOUNDS 960bbfda8aSnia%token <num> FORCE_FOCUS 97645f5050Syouri%token <ptr> STRING 98645f5050Syouri 99645f5050Syouri%type <ptr> string 100645f5050Syouri%type <num> action button number signed_number keyaction full fullkey 1010bbfda8aSnia%type <num> vgrav hgrav 102645f5050Syouri 103645f5050Syouri%start twmrc 104645f5050Syouri 105645f5050Syouri%% 1060bbfda8aSniatwmrc : { InitGramVariables(); } 1070bbfda8aSnia stmts 108645f5050Syouri ; 109645f5050Syouri 110645f5050Syouristmts : /* Empty */ 111645f5050Syouri | stmts stmt 112645f5050Syouri ; 113645f5050Syouri 114645f5050Syouristmt : error 115645f5050Syouri | noarg 116645f5050Syouri | sarg 117645f5050Syouri | narg 118645f5050Syouri | squeeze 1190bbfda8aSnia | ICON_REGION string vgrav hgrav number number { 1200bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 121645f5050Syouri } 1220bbfda8aSnia | ICON_REGION string vgrav hgrav number number string { 1230bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 124645f5050Syouri } 1250bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string { 1260bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 127645f5050Syouri } 1280bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string string { 1290bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 130645f5050Syouri } 1310bbfda8aSnia | ICON_REGION string vgrav hgrav number number { 1320bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 133645f5050Syouri } 134645f5050Syouri win_list 1350bbfda8aSnia | ICON_REGION string vgrav hgrav number number string { 1360bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 137645f5050Syouri } 138645f5050Syouri win_list 1390bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string { 1400bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 141645f5050Syouri } 142645f5050Syouri win_list 1430bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string string { 1440bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 145645f5050Syouri } 146645f5050Syouri win_list 147645f5050Syouri 1480bbfda8aSnia | WINDOW_REGION string vgrav hgrav { 1490bbfda8aSnia curplist = AddWindowRegion ($2, $3, $4); 150645f5050Syouri } 151645f5050Syouri win_list 152645f5050Syouri 153645f5050Syouri | WINDOW_BOX string string { 1540bbfda8aSnia curplist = addWindowBox ($2, $3); 155645f5050Syouri } 156645f5050Syouri win_list 157645f5050Syouri 158645f5050Syouri | ICONMGR_GEOMETRY string number { if (Scr->FirstTime) 159645f5050Syouri { 160645f5050Syouri Scr->iconmgr->geometry= (char*)$2; 161645f5050Syouri Scr->iconmgr->columns=$3; 162645f5050Syouri } 163645f5050Syouri } 164645f5050Syouri | ICONMGR_GEOMETRY string { if (Scr->FirstTime) 165645f5050Syouri Scr->iconmgr->geometry = (char*)$2; 166645f5050Syouri } 167645f5050Syouri | WORKSPCMGR_GEOMETRY string number { if (Scr->FirstTime) 168645f5050Syouri { 169645f5050Syouri Scr->workSpaceMgr.geometry= (char*)$2; 170645f5050Syouri Scr->workSpaceMgr.columns=$3; 171645f5050Syouri } 172645f5050Syouri } 173645f5050Syouri | WORKSPCMGR_GEOMETRY string { if (Scr->FirstTime) 174645f5050Syouri Scr->workSpaceMgr.geometry = (char*)$2; 175645f5050Syouri } 176645f5050Syouri | MAPWINDOWCURRENTWORKSPACE {} 177645f5050Syouri curwork 178645f5050Syouri 179645f5050Syouri | MAPWINDOWDEFAULTWORKSPACE {} 180645f5050Syouri defwork 181645f5050Syouri 182645f5050Syouri | ZOOM number { if (Scr->FirstTime) 183645f5050Syouri { 1840bbfda8aSnia Scr->DoZoom = true; 185645f5050Syouri Scr->ZoomCount = $2; 186645f5050Syouri } 187645f5050Syouri } 188645f5050Syouri | ZOOM { if (Scr->FirstTime) 1890bbfda8aSnia Scr->DoZoom = true; } 190645f5050Syouri | PIXMAPS pixmap_list {} 191645f5050Syouri | CURSORS cursor_list {} 1920bbfda8aSnia | ICONIFY_BY_UNMAPPING { curplist = &Scr->IconifyByUn; } 193645f5050Syouri win_list 194645f5050Syouri | ICONIFY_BY_UNMAPPING { if (Scr->FirstTime) 1950bbfda8aSnia Scr->IconifyByUnmapping = true; } 196645f5050Syouri 1970bbfda8aSnia | OPAQUEMOVE { curplist = &Scr->OpaqueMoveList; } 198645f5050Syouri win_list 1990bbfda8aSnia | OPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = true; } 2000bbfda8aSnia | NOOPAQUEMOVE { curplist = &Scr->NoOpaqueMoveList; } 201645f5050Syouri win_list 2020bbfda8aSnia | NOOPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = false; } 2030bbfda8aSnia | OPAQUERESIZE { curplist = &Scr->OpaqueMoveList; } 204645f5050Syouri win_list 2050bbfda8aSnia | OPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = true; } 2060bbfda8aSnia | NOOPAQUERESIZE { curplist = &Scr->NoOpaqueResizeList; } 207645f5050Syouri win_list 2080bbfda8aSnia | NOOPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = false; } 209645f5050Syouri 210645f5050Syouri | LEFT_TITLEBUTTON string EQUALS action { 2110bbfda8aSnia GotTitleButton ($2, $4, false); 212645f5050Syouri } 213645f5050Syouri | RIGHT_TITLEBUTTON string EQUALS action { 2140bbfda8aSnia GotTitleButton ($2, $4, true); 215645f5050Syouri } 2160bbfda8aSnia | LEFT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, false, true); } 217645f5050Syouri binding_list 2180bbfda8aSnia | RIGHT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, true, true); } 219645f5050Syouri binding_list 220645f5050Syouri | button string { 2210bbfda8aSnia root = GetRoot($2, NULL, NULL); 2220bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, F_MENU, root, NULL); 223645f5050Syouri } 224645f5050Syouri | button action { 225645f5050Syouri if ($2 == F_MENU) { 226645f5050Syouri pull->prev = NULL; 2270bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, $2, pull, NULL); 228645f5050Syouri } 229645f5050Syouri else { 230645f5050Syouri MenuItem *item; 231645f5050Syouri 2320bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 233645f5050Syouri item = AddToMenu (root, "x", Action, 2340bbfda8aSnia NULL, $2, NULL, NULL); 2350bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, $2, NULL, item); 236645f5050Syouri } 237645f5050Syouri Action = ""; 238645f5050Syouri pull = NULL; 239645f5050Syouri } 240645f5050Syouri | string fullkey { GotKey($1, $2); } 241645f5050Syouri | button full { GotButton($1, $2); } 242645f5050Syouri 2430bbfda8aSnia | DONT_ICONIFY_BY_UNMAPPING { curplist = &Scr->DontIconify; } 244645f5050Syouri win_list 245645f5050Syouri | WORKSPACES {} 246645f5050Syouri workspc_list 2470bbfda8aSnia | IGNOREMODIFIER 2480bbfda8aSnia { mods = 0; } 2490bbfda8aSnia LB keys 2500bbfda8aSnia { Scr->IgnoreModifier |= mods; mods = 0; } 2510bbfda8aSnia RB 2520bbfda8aSnia | OCCUPYALL { curplist = &Scr->OccupyAll; } 253645f5050Syouri win_list 2540bbfda8aSnia | ICONMENU_DONTSHOW { curplist = &Scr->IconMenuDontShow; } 255645f5050Syouri win_list 256645f5050Syouri | OCCUPYLIST {} 257645f5050Syouri occupy_list 2580bbfda8aSnia | UNMAPBYMOVINGFARAWAY { curplist = &Scr->UnmapByMovingFarAway; } 259645f5050Syouri win_list 2600bbfda8aSnia | AUTOSQUEEZE { curplist = &Scr->AutoSqueeze; } 261645f5050Syouri win_list 2620bbfda8aSnia | STARTSQUEEZED { curplist = &Scr->StartSqueezed; } 263645f5050Syouri win_list 2640bbfda8aSnia | ALWAYSSQUEEZETOGRAVITY { Scr->AlwaysSqueezeToGravity = true; } 2650bbfda8aSnia | ALWAYSSQUEEZETOGRAVITY { curplist = &Scr->AlwaysSqueezeToGravityL; } 266645f5050Syouri win_list 2670bbfda8aSnia | DONTSETINACTIVE { curplist = &Scr->DontSetInactive; } 268645f5050Syouri win_list 2690bbfda8aSnia | ICONMGR_NOSHOW { curplist = &Scr->IconMgrNoShow; } 270645f5050Syouri win_list 2710bbfda8aSnia | ICONMGR_NOSHOW { Scr->IconManagerDontShow = true; } 2720bbfda8aSnia | ICONMGRS { curplist = &Scr->IconMgrs; } 273645f5050Syouri iconm_list 2740bbfda8aSnia | ICONMGR_SHOW { curplist = &Scr->IconMgrShow; } 275645f5050Syouri win_list 2760bbfda8aSnia | NO_TITLE_HILITE { curplist = &Scr->NoTitleHighlight; } 277645f5050Syouri win_list 278645f5050Syouri | NO_TITLE_HILITE { if (Scr->FirstTime) 2790bbfda8aSnia Scr->TitleHighlight = false; } 2800bbfda8aSnia | NO_HILITE { curplist = &Scr->NoHighlight; } 281645f5050Syouri win_list 282645f5050Syouri | NO_HILITE { if (Scr->FirstTime) 2830bbfda8aSnia Scr->Highlight = false; } 2840bbfda8aSnia | ON_TOP_PRIORITY signed_number 2850bbfda8aSnia { OtpScrSetZero(Scr, WinWin, $2); } 2860bbfda8aSnia | ON_TOP_PRIORITY ICONS signed_number 2870bbfda8aSnia { OtpScrSetZero(Scr, IconWin, $3); } 2880bbfda8aSnia | ON_TOP_PRIORITY signed_number 2890bbfda8aSnia { curplist = OtpScrPriorityL(Scr, WinWin, $2); } 2900bbfda8aSnia win_list 2910bbfda8aSnia | ON_TOP_PRIORITY ICONS signed_number 2920bbfda8aSnia { curplist = OtpScrPriorityL(Scr, IconWin, $3); } 2930bbfda8aSnia win_list 2940bbfda8aSnia | ALWAYS_ON_TOP { curplist = OtpScrPriorityL(Scr, WinWin, 8); } 2950bbfda8aSnia win_list 2960bbfda8aSnia | PRIORITY_SWITCHING { OtpScrSetSwitching(Scr, WinWin, false); 2970bbfda8aSnia curplist = OtpScrSwitchingL(Scr, WinWin); } 2980bbfda8aSnia win_list 2990bbfda8aSnia | PRIORITY_NOT_SWITCHING { OtpScrSetSwitching(Scr, WinWin, true); 3000bbfda8aSnia curplist = OtpScrSwitchingL(Scr, WinWin); } 301645f5050Syouri win_list 3020bbfda8aSnia | PRIORITY_SWITCHING ICONS 3030bbfda8aSnia { OtpScrSetSwitching(Scr, IconWin, false); 3040bbfda8aSnia curplist = OtpScrSwitchingL(Scr, IconWin); } 3050bbfda8aSnia win_list 3060bbfda8aSnia | PRIORITY_NOT_SWITCHING ICONS 3070bbfda8aSnia { OtpScrSetSwitching(Scr, IconWin, true); 3080bbfda8aSnia curplist = OtpScrSwitchingL(Scr, IconWin); } 3090bbfda8aSnia win_list 3100bbfda8aSnia 3110bbfda8aSnia win_list 3120bbfda8aSnia | NO_STACKMODE { curplist = &Scr->NoStackModeL; } 313645f5050Syouri win_list 314645f5050Syouri | NO_STACKMODE { if (Scr->FirstTime) 3150bbfda8aSnia Scr->StackMode = false; } 3160bbfda8aSnia | NO_BORDER { curplist = &Scr->NoBorder; } 3170bbfda8aSnia win_list 3180bbfda8aSnia | AUTO_POPUP { Scr->AutoPopup = true; } 3190bbfda8aSnia | AUTO_POPUP { curplist = &Scr->AutoPopupL; } 320645f5050Syouri win_list 3210bbfda8aSnia | DONT_SAVE { curplist = &Scr->DontSave; } 322645f5050Syouri win_list 3230bbfda8aSnia | NO_ICON_TITLE { curplist = &Scr->NoIconTitle; } 324645f5050Syouri win_list 325645f5050Syouri | NO_ICON_TITLE { if (Scr->FirstTime) 3260bbfda8aSnia Scr->NoIconTitlebar = true; } 3270bbfda8aSnia | NO_TITLE { curplist = &Scr->NoTitle; } 328645f5050Syouri win_list 329645f5050Syouri | NO_TITLE { if (Scr->FirstTime) 3300bbfda8aSnia Scr->NoTitlebar = true; } 3310bbfda8aSnia | IGNORE_TRANSIENT { curplist = &Scr->IgnoreTransientL; } 3320bbfda8aSnia win_list 3330bbfda8aSnia | MAKE_TITLE { curplist = &Scr->MakeTitle; } 334645f5050Syouri win_list 3350bbfda8aSnia | START_ICONIFIED { curplist = &Scr->StartIconified; } 336645f5050Syouri win_list 3370bbfda8aSnia | AUTO_RAISE { curplist = &Scr->AutoRaise; } 338645f5050Syouri win_list 3390bbfda8aSnia | AUTO_RAISE { Scr->AutoRaiseDefault = true; } 3400bbfda8aSnia | WARP_ON_DEICONIFY { curplist = &Scr->WarpOnDeIconify; } 341645f5050Syouri win_list 3420bbfda8aSnia | AUTO_LOWER { curplist = &Scr->AutoLower; } 343645f5050Syouri win_list 3440bbfda8aSnia | AUTO_LOWER { Scr->AutoLowerDefault = true; } 345645f5050Syouri | MENU string LP string COLON string RP { 346645f5050Syouri root = GetRoot($2, $4, $6); } 3470bbfda8aSnia menu { root->real_menu = true;} 3480bbfda8aSnia | MENU string { root = GetRoot($2, NULL, NULL); } 3490bbfda8aSnia menu { root->real_menu = true; } 3500bbfda8aSnia | FUNCTION string { root = GetRoot($2, NULL, NULL); } 351645f5050Syouri function 3520bbfda8aSnia | ICONS { curplist = &Scr->IconNames; } 353645f5050Syouri icon_list 354645f5050Syouri | COLOR { color = COLOR; } 355645f5050Syouri color_list 356645f5050Syouri | SAVECOLOR {} 357645f5050Syouri save_color_list 358645f5050Syouri | MONOCHROME { color = MONOCHROME; } 359645f5050Syouri color_list 360645f5050Syouri | DEFAULT_FUNCTION action { Scr->DefaultFunction.func = $2; 361645f5050Syouri if ($2 == F_MENU) 362645f5050Syouri { 363645f5050Syouri pull->prev = NULL; 364645f5050Syouri Scr->DefaultFunction.menu = pull; 365645f5050Syouri } 366645f5050Syouri else 367645f5050Syouri { 3680bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 369645f5050Syouri Scr->DefaultFunction.item = 370645f5050Syouri AddToMenu(root,"x",Action, 3710bbfda8aSnia NULL,$2, NULL, NULL); 372645f5050Syouri } 373645f5050Syouri Action = ""; 374645f5050Syouri pull = NULL; 375645f5050Syouri } 376645f5050Syouri | WINDOW_FUNCTION action { Scr->WindowFunction.func = $2; 3770bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 378645f5050Syouri Scr->WindowFunction.item = 379645f5050Syouri AddToMenu(root,"x",Action, 3800bbfda8aSnia NULL,$2, NULL, NULL); 381645f5050Syouri Action = ""; 382645f5050Syouri pull = NULL; 383645f5050Syouri } 384645f5050Syouri | CHANGE_WORKSPACE_FUNCTION action { Scr->ChangeWorkspaceFunction.func = $2; 3850bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 386645f5050Syouri Scr->ChangeWorkspaceFunction.item = 387645f5050Syouri AddToMenu(root,"x",Action, 3880bbfda8aSnia NULL,$2, NULL, NULL); 389645f5050Syouri Action = ""; 390645f5050Syouri pull = NULL; 391645f5050Syouri } 392645f5050Syouri | DEICONIFY_FUNCTION action { Scr->DeIconifyFunction.func = $2; 3930bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 394645f5050Syouri Scr->DeIconifyFunction.item = 395645f5050Syouri AddToMenu(root,"x",Action, 3960bbfda8aSnia NULL,$2, NULL, NULL); 397645f5050Syouri Action = ""; 398645f5050Syouri pull = NULL; 399645f5050Syouri } 400645f5050Syouri | ICONIFY_FUNCTION action { Scr->IconifyFunction.func = $2; 4010bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 402645f5050Syouri Scr->IconifyFunction.item = 403645f5050Syouri AddToMenu(root,"x",Action, 4040bbfda8aSnia NULL,$2, NULL, NULL); 405645f5050Syouri Action = ""; 406645f5050Syouri pull = NULL; 407645f5050Syouri } 4080bbfda8aSnia | WARP_CURSOR { curplist = &Scr->WarpCursorL; } 409645f5050Syouri win_list 410645f5050Syouri | WARP_CURSOR { if (Scr->FirstTime) 4110bbfda8aSnia Scr->WarpCursor = true; } 4120bbfda8aSnia | WINDOW_RING { curplist = &Scr->WindowRingL; } 413645f5050Syouri win_list 4140bbfda8aSnia | WINDOW_RING { Scr->WindowRingAll = true; } 415645f5050Syouri | WINDOW_RING_EXCLUDE { if (!Scr->WindowRingL) 4160bbfda8aSnia Scr->WindowRingAll = true; 4170bbfda8aSnia curplist = &Scr->WindowRingExcludeL; } 418645f5050Syouri win_list 419645f5050Syouri | WINDOW_GEOMETRIES { } 420645f5050Syouri wingeom_list 421645f5050Syouri | VIRTUAL_SCREENS { } 422645f5050Syouri geom_list 4230bbfda8aSnia | EWMH_IGNORE { } 4240bbfda8aSnia ewmh_ignore_list 4250bbfda8aSnia | MWM_IGNORE { } 4260bbfda8aSnia mwm_ignore_list 4270bbfda8aSnia | RPLAY_SOUNDS { } 4280bbfda8aSnia rplay_sounds_list 4290bbfda8aSnia | FORCE_FOCUS { Scr->ForceFocus = true; } 4300bbfda8aSnia | FORCE_FOCUS { curplist = &Scr->ForceFocusL; } 4310bbfda8aSnia win_list 432645f5050Syouri ; 433645f5050Syouri 434645f5050Syourinoarg : KEYWORD { if (!do_single_keyword ($1)) { 435645f5050Syouri twmrc_error_prefix(); 436645f5050Syouri fprintf (stderr, 437645f5050Syouri "unknown singleton keyword %d\n", 438645f5050Syouri $1); 4390bbfda8aSnia ParseError = true; 440645f5050Syouri } 441645f5050Syouri } 442645f5050Syouri ; 443645f5050Syouri 444645f5050Syourisarg : SKEYWORD string { if (!do_string_keyword ($1, $2)) { 445645f5050Syouri twmrc_error_prefix(); 446645f5050Syouri fprintf (stderr, 447645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 448645f5050Syouri $1, $2); 4490bbfda8aSnia ParseError = true; 450645f5050Syouri } 451645f5050Syouri } 4520bbfda8aSnia | SKEYWORD { if (!do_string_keyword ($1, DEFSTRING)) { 453645f5050Syouri twmrc_error_prefix(); 454645f5050Syouri fprintf (stderr, 455645f5050Syouri "unknown string keyword %d (no value)\n", 456645f5050Syouri $1); 4570bbfda8aSnia ParseError = true; 458645f5050Syouri } 459645f5050Syouri } 460645f5050Syouri ; 461645f5050Syouri 462645f5050Syourisarg : SSKEYWORD string string 463645f5050Syouri { if (!do_string_string_keyword ($1, $2, $3)) { 464645f5050Syouri twmrc_error_prefix(); 465645f5050Syouri fprintf (stderr, 466645f5050Syouri "unknown strings keyword %d (value \"%s\" and \"%s\")\n", 467645f5050Syouri $1, $2, $3); 4680bbfda8aSnia ParseError = true; 469645f5050Syouri } 470645f5050Syouri } 4710bbfda8aSnia | SSKEYWORD string { if (!do_string_string_keyword ($1, $2, NULL)) { 472645f5050Syouri twmrc_error_prefix(); 473645f5050Syouri fprintf (stderr, 474645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 475645f5050Syouri $1, $2); 4760bbfda8aSnia ParseError = true; 477645f5050Syouri } 478645f5050Syouri } 4790bbfda8aSnia | SSKEYWORD { if (!do_string_string_keyword ($1, NULL, NULL)) { 480645f5050Syouri twmrc_error_prefix(); 481645f5050Syouri fprintf (stderr, 482645f5050Syouri "unknown string keyword %d (no value)\n", 483645f5050Syouri $1); 4840bbfda8aSnia ParseError = true; 485645f5050Syouri } 486645f5050Syouri } 487645f5050Syouri ; 488645f5050Syouri 489645f5050Syourinarg : NKEYWORD number { if (!do_number_keyword ($1, $2)) { 490645f5050Syouri twmrc_error_prefix(); 491645f5050Syouri fprintf (stderr, 492645f5050Syouri "unknown numeric keyword %d (value %d)\n", 493645f5050Syouri $1, $2); 4940bbfda8aSnia ParseError = true; 495645f5050Syouri } 496645f5050Syouri } 497645f5050Syouri ; 498645f5050Syouri 499645f5050Syouri 500645f5050Syouri 501645f5050Syourikeyaction : EQUALS keys COLON action { $$ = $4; } 502645f5050Syouri ; 503645f5050Syouri 504645f5050Syourifull : EQUALS keys COLON contexts COLON action { $$ = $6; } 505645f5050Syouri ; 506645f5050Syouri 507645f5050Syourifullkey : EQUALS keys COLON contextkeys COLON action { $$ = $6; } 508645f5050Syouri ; 509645f5050Syouri 510645f5050Syourikeys : /* Empty */ 511645f5050Syouri | keys key 512645f5050Syouri ; 513645f5050Syouri 514645f5050Syourikey : META { mods |= Mod1Mask; } 515645f5050Syouri | SHIFT { mods |= ShiftMask; } 516645f5050Syouri | LOCK { mods |= LockMask; } 517645f5050Syouri | CONTROL { mods |= ControlMask; } 518645f5050Syouri | ALTER number { if ($2 < 1 || $2 > 5) { 519645f5050Syouri twmrc_error_prefix(); 520645f5050Syouri fprintf (stderr, 5210bbfda8aSnia "bad altkeymap number (%d), must be 1-5\n", 522645f5050Syouri $2); 5230bbfda8aSnia ParseError = true; 524645f5050Syouri } else { 525645f5050Syouri mods |= (Alt1Mask << ($2 - 1)); 526645f5050Syouri } 527645f5050Syouri } 528645f5050Syouri | META number { if ($2 < 1 || $2 > 5) { 529645f5050Syouri twmrc_error_prefix(); 530645f5050Syouri fprintf (stderr, 531645f5050Syouri "bad modifier number (%d), must be 1-5\n", 532645f5050Syouri $2); 5330bbfda8aSnia ParseError = true; 534645f5050Syouri } else { 535645f5050Syouri mods |= (Mod1Mask << ($2 - 1)); 536645f5050Syouri } 537645f5050Syouri } 538645f5050Syouri | OR { } 539645f5050Syouri ; 540645f5050Syouri 5410bbfda8aSniavgrav : GRAVITY { 5420bbfda8aSnia switch($1) { 5430bbfda8aSnia case GRAV_NORTH: 5440bbfda8aSnia case GRAV_SOUTH: 5450bbfda8aSnia /* OK */ 5460bbfda8aSnia $$ = $1; 5470bbfda8aSnia break; 5480bbfda8aSnia default: 5490bbfda8aSnia twmrc_error_prefix(); 5500bbfda8aSnia fprintf(stderr, "Bad vertical gravity '%s'\n", yytext); 5510bbfda8aSnia ParseError = true; 5520bbfda8aSnia YYERROR; 5530bbfda8aSnia } 5540bbfda8aSnia } 5550bbfda8aSnia 5560bbfda8aSniahgrav : GRAVITY { 5570bbfda8aSnia switch($1) { 5580bbfda8aSnia case GRAV_EAST: 5590bbfda8aSnia case GRAV_WEST: 5600bbfda8aSnia /* OK */ 5610bbfda8aSnia $$ = $1; 5620bbfda8aSnia break; 5630bbfda8aSnia default: 5640bbfda8aSnia twmrc_error_prefix(); 5650bbfda8aSnia fprintf(stderr, "Bad horiz gravity '%s'\n", yytext); 5660bbfda8aSnia ParseError = true; 5670bbfda8aSnia YYERROR; 5680bbfda8aSnia } 5690bbfda8aSnia } 5700bbfda8aSnia 571645f5050Syouricontexts : /* Empty */ 572645f5050Syouri | contexts context 573645f5050Syouri ; 574645f5050Syouri 575645f5050Syouricontext : WINDOW { cont |= C_WINDOW_BIT; } 576645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 577645f5050Syouri | ICON { cont |= C_ICON_BIT; } 578645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 579645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 580645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 581645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 582645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 583645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 584645f5050Syouri | ALL { cont |= C_ALL_BITS; } 5850bbfda8aSnia | OR { } 586645f5050Syouri ; 587645f5050Syouri 588645f5050Syouricontextkeys : /* Empty */ 589645f5050Syouri | contextkeys contextkey 590645f5050Syouri ; 591645f5050Syouri 592645f5050Syouricontextkey : WINDOW { cont |= C_WINDOW_BIT; } 593645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 594645f5050Syouri | ICON { cont |= C_ICON_BIT; } 595645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 596645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 597645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 598645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 599645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 600645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 6010bbfda8aSnia | ALL { cont |= C_ALL_BITS; } 602645f5050Syouri | OR { } 603645f5050Syouri | string { Name = (char*)$1; cont |= C_NAME_BIT; } 604645f5050Syouri ; 605645f5050Syouri 606645f5050Syouri 607645f5050Syouribinding_list : LB binding_entries RB {} 608645f5050Syouri ; 609645f5050Syouri 610645f5050Syouribinding_entries : /* Empty */ 611645f5050Syouri | binding_entries binding_entry 612645f5050Syouri ; 613645f5050Syouri 6140bbfda8aSniabinding_entry : button keyaction { SetCurrentTBAction($1, mods, $2, Action, pull); mods = 0;} 6150bbfda8aSnia | button EQUALS action { SetCurrentTBAction($1, 0, $3, Action, pull);} 6160bbfda8aSnia | button COLON action { 6170bbfda8aSnia /* Deprecated since 3.8, no longer supported */ 6180bbfda8aSnia yyerror("Title buttons specifications without = are no " 6190bbfda8aSnia "longer supported."); 6200bbfda8aSnia } 621645f5050Syouri ; 622645f5050Syouri 623645f5050Syouri 624645f5050Syouripixmap_list : LB pixmap_entries RB {} 625645f5050Syouri ; 626645f5050Syouri 627645f5050Syouripixmap_entries : /* Empty */ 628645f5050Syouri | pixmap_entries pixmap_entry 629645f5050Syouri ; 630645f5050Syouri 6310bbfda8aSniapixmap_entry : TITLE_HILITE string { Scr->HighlightPixmapName = strdup($2); } 632645f5050Syouri ; 633645f5050Syouri 634645f5050Syouri 635645f5050Syouricursor_list : LB cursor_entries RB {} 636645f5050Syouri ; 637645f5050Syouri 638645f5050Syouricursor_entries : /* Empty */ 639645f5050Syouri | cursor_entries cursor_entry 640645f5050Syouri ; 641645f5050Syouri 642645f5050Syouricursor_entry : FRAME string string { 643645f5050Syouri NewBitmapCursor(&Scr->FrameCursor, $2, $3); } 644645f5050Syouri | FRAME string { 645645f5050Syouri NewFontCursor(&Scr->FrameCursor, $2); } 646645f5050Syouri | TITLE string string { 647645f5050Syouri NewBitmapCursor(&Scr->TitleCursor, $2, $3); } 648645f5050Syouri | TITLE string { 649645f5050Syouri NewFontCursor(&Scr->TitleCursor, $2); } 650645f5050Syouri | ICON string string { 651645f5050Syouri NewBitmapCursor(&Scr->IconCursor, $2, $3); } 652645f5050Syouri | ICON string { 653645f5050Syouri NewFontCursor(&Scr->IconCursor, $2); } 654645f5050Syouri | ICONMGR string string { 655645f5050Syouri NewBitmapCursor(&Scr->IconMgrCursor, $2, $3); } 656645f5050Syouri | ICONMGR string { 657645f5050Syouri NewFontCursor(&Scr->IconMgrCursor, $2); } 658645f5050Syouri | BUTTON string string { 659645f5050Syouri NewBitmapCursor(&Scr->ButtonCursor, $2, $3); } 660645f5050Syouri | BUTTON string { 661645f5050Syouri NewFontCursor(&Scr->ButtonCursor, $2); } 662645f5050Syouri | MOVE string string { 663645f5050Syouri NewBitmapCursor(&Scr->MoveCursor, $2, $3); } 664645f5050Syouri | MOVE string { 665645f5050Syouri NewFontCursor(&Scr->MoveCursor, $2); } 666645f5050Syouri | RESIZE string string { 667645f5050Syouri NewBitmapCursor(&Scr->ResizeCursor, $2, $3); } 668645f5050Syouri | RESIZE string { 669645f5050Syouri NewFontCursor(&Scr->ResizeCursor, $2); } 670645f5050Syouri | WAITC string string { 671645f5050Syouri NewBitmapCursor(&Scr->WaitCursor, $2, $3); } 672645f5050Syouri | WAITC string { 673645f5050Syouri NewFontCursor(&Scr->WaitCursor, $2); } 674645f5050Syouri | MENU string string { 675645f5050Syouri NewBitmapCursor(&Scr->MenuCursor, $2, $3); } 676645f5050Syouri | MENU string { 677645f5050Syouri NewFontCursor(&Scr->MenuCursor, $2); } 678645f5050Syouri | SELECT string string { 679645f5050Syouri NewBitmapCursor(&Scr->SelectCursor, $2, $3); } 680645f5050Syouri | SELECT string { 681645f5050Syouri NewFontCursor(&Scr->SelectCursor, $2); } 682645f5050Syouri | KILL string string { 683645f5050Syouri NewBitmapCursor(&Scr->DestroyCursor, $2, $3); } 684645f5050Syouri | KILL string { 685645f5050Syouri NewFontCursor(&Scr->DestroyCursor, $2); } 686645f5050Syouri ; 687645f5050Syouri 688645f5050Syouricolor_list : LB color_entries RB {} 689645f5050Syouri ; 690645f5050Syouri 691645f5050Syouri 692645f5050Syouricolor_entries : /* Empty */ 693645f5050Syouri | color_entries color_entry 694645f5050Syouri ; 695645f5050Syouri 696645f5050Syouricolor_entry : CLKEYWORD string { if (!do_colorlist_keyword ($1, color, 697645f5050Syouri $2)) { 698645f5050Syouri twmrc_error_prefix(); 699645f5050Syouri fprintf (stderr, 700645f5050Syouri "unhandled list color keyword %d (string \"%s\")\n", 701645f5050Syouri $1, $2); 7020bbfda8aSnia ParseError = true; 703645f5050Syouri } 704645f5050Syouri } 7050bbfda8aSnia | CLKEYWORD string { curplist = do_colorlist_keyword($1,color, 706645f5050Syouri $2); 7070bbfda8aSnia if (!curplist) { 708645f5050Syouri twmrc_error_prefix(); 709645f5050Syouri fprintf (stderr, 710645f5050Syouri "unhandled color list keyword %d (string \"%s\")\n", 711645f5050Syouri $1, $2); 7120bbfda8aSnia ParseError = true; 713645f5050Syouri } 714645f5050Syouri } 715645f5050Syouri win_color_list 716645f5050Syouri | CKEYWORD string { if (!do_color_keyword ($1, color, 717645f5050Syouri $2)) { 718645f5050Syouri twmrc_error_prefix(); 719645f5050Syouri fprintf (stderr, 720645f5050Syouri "unhandled color keyword %d (string \"%s\")\n", 721645f5050Syouri $1, $2); 7220bbfda8aSnia ParseError = true; 723645f5050Syouri } 724645f5050Syouri } 725645f5050Syouri ; 726645f5050Syouri 727645f5050Syourisave_color_list : LB s_color_entries RB {} 728645f5050Syouri ; 729645f5050Syouri 730645f5050Syouris_color_entries : /* Empty */ 731645f5050Syouri | s_color_entries s_color_entry 732645f5050Syouri ; 733645f5050Syouri 734645f5050Syouris_color_entry : string { do_string_savecolor(color, $1); } 735645f5050Syouri | CLKEYWORD { do_var_savecolor($1); } 736645f5050Syouri ; 737645f5050Syouri 738645f5050Syouriwin_color_list : LB win_color_entries RB {} 739645f5050Syouri ; 740645f5050Syouri 741645f5050Syouriwin_color_entries : /* Empty */ 742645f5050Syouri | win_color_entries win_color_entry 743645f5050Syouri ; 744645f5050Syouri 745645f5050Syouriwin_color_entry : string string { if (Scr->FirstTime && 746645f5050Syouri color == Scr->Monochrome) 7470bbfda8aSnia AddToList(curplist, $1, $2); } 748645f5050Syouri ; 749645f5050Syouri 750645f5050Syouriwingeom_list : LB wingeom_entries RB {} 751645f5050Syouri ; 752645f5050Syouri 753645f5050Syouriwingeom_entries : /* Empty */ 754645f5050Syouri | wingeom_entries wingeom_entry 755645f5050Syouri ; 756645f5050Syouri/* added a ';' after call to AddToList */ 757645f5050Syouriwingeom_entry : string string { AddToList (&Scr->WindowGeometries, $1, $2); } 758645f5050Syouri ; 759645f5050Syouri 760645f5050Syourigeom_list : LB geom_entries RB {} 761645f5050Syouri ; 762645f5050Syouri 763645f5050Syourigeom_entries : /* Empty */ 764645f5050Syouri | geom_entries geom_entry 765645f5050Syouri ; 766645f5050Syouri 767645f5050Syourigeom_entry : string { AddToList (&Scr->VirtualScreens, $1, ""); } 768645f5050Syouri ; 769645f5050Syouri 7700bbfda8aSnia 7710bbfda8aSniaewmh_ignore_list : LB ewmh_ignore_entries RB { proc_ewmh_ignore(); } 7720bbfda8aSnia ; 7730bbfda8aSnia 7740bbfda8aSniaewmh_ignore_entries : /* Empty */ 7750bbfda8aSnia | ewmh_ignore_entries ewmh_ignore_entry 7760bbfda8aSnia ; 7770bbfda8aSnia 7780bbfda8aSniaewmh_ignore_entry : string { add_ewmh_ignore($1); } 7790bbfda8aSnia ; 7800bbfda8aSnia 7810bbfda8aSnia 7820bbfda8aSniamwm_ignore_list : LB mwm_ignore_entries RB { proc_mwm_ignore(); } 7830bbfda8aSnia ; 7840bbfda8aSnia 7850bbfda8aSniamwm_ignore_entries : /* Empty */ 7860bbfda8aSnia | mwm_ignore_entries mwm_ignore_entry 7870bbfda8aSnia ; 7880bbfda8aSnia 7890bbfda8aSniamwm_ignore_entry : string { add_mwm_ignore($1); } 7900bbfda8aSnia ; 7910bbfda8aSnia 7920bbfda8aSnia 793645f5050Syourisqueeze : SQUEEZE_TITLE { 7940bbfda8aSnia if (HasShape) Scr->SqueezeTitle = true; 795645f5050Syouri } 7960bbfda8aSnia | SQUEEZE_TITLE { curplist = &Scr->SqueezeTitleL; 7970bbfda8aSnia if (HasShape) 7980bbfda8aSnia Scr->SqueezeTitle = true; 799645f5050Syouri } 800645f5050Syouri LB win_sqz_entries RB 8010bbfda8aSnia | DONT_SQUEEZE_TITLE { Scr->SqueezeTitle = false; } 8020bbfda8aSnia | DONT_SQUEEZE_TITLE { curplist = &Scr->DontSqueezeTitleL; } 803645f5050Syouri win_list 804645f5050Syouri ; 805645f5050Syouri 806645f5050Syouriwin_sqz_entries : /* Empty */ 8070bbfda8aSnia | win_sqz_entries string SIJENUM signed_number number { 808645f5050Syouri if (Scr->FirstTime) { 8090bbfda8aSnia do_squeeze_entry (curplist, $2, $3, $4, $5); 810645f5050Syouri } 811645f5050Syouri } 812645f5050Syouri ; 813645f5050Syouri 814645f5050Syouri 815645f5050Syouriiconm_list : LB iconm_entries RB {} 816645f5050Syouri ; 817645f5050Syouri 818645f5050Syouriiconm_entries : /* Empty */ 819645f5050Syouri | iconm_entries iconm_entry 820645f5050Syouri ; 821645f5050Syouri 822645f5050Syouriiconm_entry : string string number { if (Scr->FirstTime) 8230bbfda8aSnia AddToList(curplist, $1, 8240bbfda8aSnia AllocateIconManager($1, NULL, 825645f5050Syouri $2,$3)); 826645f5050Syouri } 827645f5050Syouri | string string string number 828645f5050Syouri { if (Scr->FirstTime) 8290bbfda8aSnia AddToList(curplist, $1, 830645f5050Syouri AllocateIconManager($1,$2, 831645f5050Syouri $3, $4)); 832645f5050Syouri } 833645f5050Syouri ; 834645f5050Syouri 835645f5050Syouriworkspc_list : LB workspc_entries RB {} 836645f5050Syouri ; 837645f5050Syouri 838645f5050Syouriworkspc_entries : /* Empty */ 839645f5050Syouri | workspc_entries workspc_entry 840645f5050Syouri ; 841645f5050Syouri 842645f5050Syouriworkspc_entry : string { 8430bbfda8aSnia AddWorkSpace ($1, NULL, NULL, NULL, NULL, NULL); 844645f5050Syouri } 845645f5050Syouri | string { 846645f5050Syouri curWorkSpc = (char*)$1; 847645f5050Syouri } 848645f5050Syouri workapp_list 849645f5050Syouri ; 850645f5050Syouri 851645f5050Syouriworkapp_list : LB workapp_entries RB {} 852645f5050Syouri ; 853645f5050Syouri 854645f5050Syouriworkapp_entries : /* Empty */ 855645f5050Syouri | workapp_entries workapp_entry 856645f5050Syouri ; 857645f5050Syouri 858645f5050Syouriworkapp_entry : string { 8590bbfda8aSnia AddWorkSpace (curWorkSpc, $1, NULL, NULL, NULL, NULL); 860645f5050Syouri } 861645f5050Syouri | string string { 8620bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, NULL, NULL, NULL); 863645f5050Syouri } 864645f5050Syouri | string string string { 8650bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, $3, NULL, NULL); 866645f5050Syouri } 867645f5050Syouri | string string string string { 8680bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, $3, $4, NULL); 869645f5050Syouri } 870645f5050Syouri | string string string string string { 871645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, $3, $4, $5); 872645f5050Syouri } 873645f5050Syouri ; 874645f5050Syouri 875645f5050Syouricurwork : LB string RB { 876645f5050Syouri WMapCreateCurrentBackGround ($2, NULL, NULL, NULL); 877645f5050Syouri } 878645f5050Syouri | LB string string RB { 879645f5050Syouri WMapCreateCurrentBackGround ($2, $3, NULL, NULL); 880645f5050Syouri } 881645f5050Syouri | LB string string string RB { 882645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, NULL); 883645f5050Syouri } 884645f5050Syouri | LB string string string string RB { 885645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, $5); 886645f5050Syouri } 887645f5050Syouri ; 888645f5050Syouri 889645f5050Syouridefwork : LB string RB { 890645f5050Syouri WMapCreateDefaultBackGround ($2, NULL, NULL, NULL); 891645f5050Syouri } 892645f5050Syouri | LB string string RB { 893645f5050Syouri WMapCreateDefaultBackGround ($2, $3, NULL, NULL); 894645f5050Syouri } 895645f5050Syouri | LB string string string RB { 896645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, NULL); 897645f5050Syouri } 898645f5050Syouri | LB string string string string RB { 899645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, $5); 900645f5050Syouri } 901645f5050Syouri ; 902645f5050Syouri 903645f5050Syouriwin_list : LB win_entries RB {} 904645f5050Syouri ; 905645f5050Syouri 906645f5050Syouriwin_entries : /* Empty */ 907645f5050Syouri | win_entries win_entry 908645f5050Syouri ; 909645f5050Syouri 910645f5050Syouriwin_entry : string { if (Scr->FirstTime) 9110bbfda8aSnia AddToList(curplist, $1, 0); 912645f5050Syouri } 913645f5050Syouri ; 914645f5050Syouri 915645f5050Syourioccupy_list : LB occupy_entries RB {} 916645f5050Syouri ; 917645f5050Syouri 918645f5050Syourioccupy_entries : /* Empty */ 919645f5050Syouri | occupy_entries occupy_entry 920645f5050Syouri ; 921645f5050Syouri 922645f5050Syourioccupy_entry : string {client = (char*)$1;} 923645f5050Syouri occupy_workspc_list 924645f5050Syouri | WINDOW string {client = (char*)$2;} 925645f5050Syouri occupy_workspc_list 926645f5050Syouri | WORKSPACE string {workspace = (char*)$2;} 927645f5050Syouri occupy_window_list 928645f5050Syouri ; 929645f5050Syouri 930645f5050Syourioccupy_workspc_list : LB occupy_workspc_entries RB {} 931645f5050Syouri ; 932645f5050Syouri 933645f5050Syourioccupy_workspc_entries : /* Empty */ 934645f5050Syouri | occupy_workspc_entries occupy_workspc_entry 935645f5050Syouri ; 936645f5050Syouri 937645f5050Syourioccupy_workspc_entry : string { 9380bbfda8aSnia if(!AddToClientsList ($1, client)) { 9390bbfda8aSnia twmrc_error_prefix(); 9400bbfda8aSnia fprintf(stderr, "unknown workspace '%s'\n", $1); 9410bbfda8aSnia } 942645f5050Syouri } 943645f5050Syouri ; 944645f5050Syouri 945645f5050Syourioccupy_window_list : LB occupy_window_entries RB {} 946645f5050Syouri ; 947645f5050Syouri 948645f5050Syourioccupy_window_entries : /* Empty */ 949645f5050Syouri | occupy_window_entries occupy_window_entry 950645f5050Syouri ; 951645f5050Syouri 952645f5050Syourioccupy_window_entry : string { 9530bbfda8aSnia if(!AddToClientsList (workspace, $1)) { 9540bbfda8aSnia twmrc_error_prefix(); 9550bbfda8aSnia fprintf(stderr, "unknown workspace '%s'\n", workspace); 9560bbfda8aSnia } 957645f5050Syouri } 958645f5050Syouri ; 959645f5050Syouri 960645f5050Syouriicon_list : LB icon_entries RB {} 961645f5050Syouri ; 962645f5050Syouri 963645f5050Syouriicon_entries : /* Empty */ 964645f5050Syouri | icon_entries icon_entry 965645f5050Syouri ; 966645f5050Syouri 9670bbfda8aSniaicon_entry : string string { if (Scr->FirstTime) AddToList(curplist, $1, $2); } 9680bbfda8aSnia ; 9690bbfda8aSnia 9700bbfda8aSniarplay_sounds_list : LB rplay_sounds_entries RB { 9710bbfda8aSnia#ifndef SOUNDS 9720bbfda8aSnia twmrc_error_prefix(); 9730bbfda8aSnia fprintf(stderr, "RplaySounds ignored; rplay support " 9740bbfda8aSnia "not configured.\n"); 9750bbfda8aSnia#else 9760bbfda8aSnia sound_set_from_config(); 9770bbfda8aSnia#endif 9780bbfda8aSnia } 9790bbfda8aSnia ; 9800bbfda8aSnia 9810bbfda8aSniarplay_sounds_entries : /* Empty */ 9820bbfda8aSnia | rplay_sounds_entries rplay_sounds_entry 9830bbfda8aSnia ; 9840bbfda8aSnia 9850bbfda8aSniarplay_sounds_entry : string string { 9860bbfda8aSnia#ifdef SOUNDS 9870bbfda8aSnia if(set_sound_event_name($1, $2) != 0) { 9880bbfda8aSnia twmrc_error_prefix(); 9890bbfda8aSnia fprintf(stderr, "Failed adding sound for %s; " 9900bbfda8aSnia "maybe event name is invalid?\n", $1); 9910bbfda8aSnia } 9920bbfda8aSnia#endif 9930bbfda8aSnia } 994645f5050Syouri ; 995645f5050Syouri 996645f5050Syourifunction : LB function_entries RB {} 997645f5050Syouri ; 998645f5050Syouri 999645f5050Syourifunction_entries: /* Empty */ 1000645f5050Syouri | function_entries function_entry 1001645f5050Syouri ; 1002645f5050Syouri 1003645f5050Syourifunction_entry : action { AddToMenu(root, "", Action, NULL, $1, 10040bbfda8aSnia NULL, NULL); 1005645f5050Syouri Action = ""; 1006645f5050Syouri } 1007645f5050Syouri ; 1008645f5050Syouri 10090bbfda8aSniamenu : LB menu_entries RB {lastmenuitem = NULL;} 1010645f5050Syouri ; 1011645f5050Syouri 1012645f5050Syourimenu_entries : /* Empty */ 1013645f5050Syouri | menu_entries menu_entry 1014645f5050Syouri ; 1015645f5050Syouri 1016645f5050Syourimenu_entry : string action { 1017645f5050Syouri if ($2 == F_SEPARATOR) { 10180bbfda8aSnia if (lastmenuitem) lastmenuitem->separated = true; 1019645f5050Syouri } 1020645f5050Syouri else { 10210bbfda8aSnia lastmenuitem = AddToMenu(root, $1, Action, pull, $2, NULL, NULL); 1022645f5050Syouri Action = ""; 1023645f5050Syouri pull = NULL; 1024645f5050Syouri } 1025645f5050Syouri } 1026645f5050Syouri | string LP string COLON string RP action { 1027645f5050Syouri if ($7 == F_SEPARATOR) { 10280bbfda8aSnia if (lastmenuitem) lastmenuitem->separated = true; 1029645f5050Syouri } 1030645f5050Syouri else { 1031645f5050Syouri lastmenuitem = AddToMenu(root, $1, Action, pull, $7, $3, $5); 1032645f5050Syouri Action = ""; 1033645f5050Syouri pull = NULL; 1034645f5050Syouri } 1035645f5050Syouri } 1036645f5050Syouri ; 1037645f5050Syouri 1038645f5050Syouriaction : FKEYWORD { $$ = $1; } 1039645f5050Syouri | FSKEYWORD string { 1040645f5050Syouri $$ = $1; 1041645f5050Syouri Action = (char*)$2; 1042645f5050Syouri switch ($1) { 1043645f5050Syouri case F_MENU: 10440bbfda8aSnia pull = GetRoot ($2, NULL,NULL); 1045645f5050Syouri pull->prev = root; 1046645f5050Syouri break; 1047645f5050Syouri case F_WARPRING: 1048645f5050Syouri if (!CheckWarpRingArg (Action)) { 1049645f5050Syouri twmrc_error_prefix(); 1050645f5050Syouri fprintf (stderr, 1051645f5050Syouri "ignoring invalid f.warptoring argument \"%s\"\n", 1052645f5050Syouri Action); 1053645f5050Syouri $$ = F_NOP; 1054645f5050Syouri } 1055645f5050Syouri case F_WARPTOSCREEN: 1056645f5050Syouri if (!CheckWarpScreenArg (Action)) { 1057645f5050Syouri twmrc_error_prefix(); 1058645f5050Syouri fprintf (stderr, 1059645f5050Syouri "ignoring invalid f.warptoscreen argument \"%s\"\n", 1060645f5050Syouri Action); 1061645f5050Syouri $$ = F_NOP; 1062645f5050Syouri } 1063645f5050Syouri break; 1064645f5050Syouri case F_COLORMAP: 1065645f5050Syouri if (CheckColormapArg (Action)) { 1066645f5050Syouri $$ = F_COLORMAP; 1067645f5050Syouri } else { 1068645f5050Syouri twmrc_error_prefix(); 1069645f5050Syouri fprintf (stderr, 1070645f5050Syouri "ignoring invalid f.colormap argument \"%s\"\n", 1071645f5050Syouri Action); 1072645f5050Syouri $$ = F_NOP; 1073645f5050Syouri } 1074645f5050Syouri break; 1075645f5050Syouri } /* end switch */ 1076645f5050Syouri } 1077645f5050Syouri ; 1078645f5050Syouri 1079645f5050Syouri 1080645f5050Syourisigned_number : number { $$ = $1; } 1081645f5050Syouri | PLUS number { $$ = $2; } 1082645f5050Syouri | MINUS number { $$ = -($2); } 1083645f5050Syouri ; 1084645f5050Syouri 1085645f5050Syouributton : BUTTON number { $$ = $2; 1086645f5050Syouri if ($2 == 0) 1087645f5050Syouri yyerror("bad button 0"); 1088645f5050Syouri 1089645f5050Syouri if ($2 > MAX_BUTTONS) 1090645f5050Syouri { 1091645f5050Syouri $$ = 0; 1092645f5050Syouri yyerror("button number too large"); 1093645f5050Syouri } 1094645f5050Syouri } 1095645f5050Syouri ; 1096645f5050Syouri 10970bbfda8aSniastring : STRING { char *ptr = strdup($1); 1098645f5050Syouri RemoveDQuote(ptr); 1099645f5050Syouri $$ = ptr; 1100645f5050Syouri } 1101645f5050Syouri ; 1102645f5050Syouri 1103645f5050Syourinumber : NUMBER { $$ = $1; } 1104645f5050Syouri ; 1105645f5050Syouri 1106645f5050Syouri%% 1107