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" 33df1c27a6Snia#ifdef WINBOX 34645f5050Syouri#include "windowbox.h" 35df1c27a6Snia#endif 360bbfda8aSnia#include "functions_defs.h" 37645f5050Syouri#include "list.h" 38645f5050Syouri#include "util.h" 390bbfda8aSnia#include "occupation.h" 40645f5050Syouri#include "screen.h" 41645f5050Syouri#include "parse.h" 420bbfda8aSnia#include "parse_be.h" 430bbfda8aSnia#include "parse_yacc.h" 44645f5050Syouri#include "cursor.h" 450bbfda8aSnia#include "win_decorations_init.h" 460bbfda8aSnia#include "win_regions.h" 470bbfda8aSnia#include "workspace_config.h" 480bbfda8aSnia#ifdef SOUNDS 490bbfda8aSnia# include "sound.h" 50645f5050Syouri#endif 51645f5050Syouri 520bbfda8aSniastatic char *curWorkSpc = NULL; 530bbfda8aSniastatic char *client = NULL; 540bbfda8aSniastatic char *workspace = NULL; 550bbfda8aSniastatic MenuItem *lastmenuitem = NULL; 560bbfda8aSniastatic name_list **curplist = NULL; 570bbfda8aSniastatic int color = 0; 580bbfda8aSniaextern char *yytext; // Have to manually pull this in 590bbfda8aSnia 600bbfda8aSniaint yylex(void); 61645f5050Syouri%} 62645f5050Syouri 63645f5050Syouri%union 64645f5050Syouri{ 65645f5050Syouri int num; 66645f5050Syouri char *ptr; 67645f5050Syouri}; 68645f5050Syouri 69645f5050Syouri 70645f5050Syouri%token <num> LB RB LP RP MENUS MENU BUTTON DEFAULT_FUNCTION PLUS MINUS 71645f5050Syouri%token <num> ALL OR CURSORS PIXMAPS ICONS COLOR SAVECOLOR MONOCHROME FUNCTION 72645f5050Syouri%token <num> ICONMGR_SHOW ICONMGR ALTER WINDOW_FUNCTION ZOOM ICONMGRS 73645f5050Syouri%token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE 74645f5050Syouri%token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING 750bbfda8aSnia%token <num> AUTO_POPUP 76645f5050Syouri%token <num> NO_BORDER NO_ICON_TITLE NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION 77645f5050Syouri%token <num> WINDOW_REGION META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME 78645f5050Syouri%token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE 790bbfda8aSnia%token <num> WARP_ON_DEICONIFY 80645f5050Syouri%token <num> START_ICONIFIED NO_TITLE_HILITE TITLE_HILITE 81645f5050Syouri%token <num> MOVE RESIZE WAITC SELECT KILL LEFT_TITLEBUTTON RIGHT_TITLEBUTTON 82645f5050Syouri%token <num> NUMBER KEYWORD NKEYWORD CKEYWORD CLKEYWORD FKEYWORD FSKEYWORD 830bbfda8aSnia%token <num> FNKEYWORD PRIORITY_SWITCHING PRIORITY_NOT_SWITCHING 840bbfda8aSnia%token <num> SKEYWORD SSKEYWORD WINDOW_RING WINDOW_RING_EXCLUDE WARP_CURSOR ERRORTOKEN 850bbfda8aSnia%token <num> GRAVITY /* N/S/E/W */ 860bbfda8aSnia%token <num> SIJENUM /* SqueezeTitle justifications, SIJust enum */ 87645f5050Syouri%token <num> NO_STACKMODE ALWAYS_ON_TOP WORKSPACE WORKSPACES WORKSPCMGR_GEOMETRY 88645f5050Syouri%token <num> OCCUPYALL OCCUPYLIST MAPWINDOWCURRENTWORKSPACE MAPWINDOWDEFAULTWORKSPACE 890bbfda8aSnia%token <num> ON_TOP_PRIORITY 90645f5050Syouri%token <num> UNMAPBYMOVINGFARAWAY OPAQUEMOVE NOOPAQUEMOVE OPAQUERESIZE NOOPAQUERESIZE 91645f5050Syouri%token <num> DONTSETINACTIVE CHANGE_WORKSPACE_FUNCTION DEICONIFY_FUNCTION ICONIFY_FUNCTION 92645f5050Syouri%token <num> AUTOSQUEEZE STARTSQUEEZED DONT_SAVE AUTO_LOWER ICONMENU_DONTSHOW WINDOW_BOX 93645f5050Syouri%token <num> IGNOREMODIFIER WINDOW_GEOMETRIES ALWAYSSQUEEZETOGRAVITY VIRTUAL_SCREENS 940bbfda8aSnia%token <num> IGNORE_TRANSIENT 950bbfda8aSnia%token <num> EWMH_IGNORE 960bbfda8aSnia%token <num> MWM_IGNORE 97df1c27a6Snia%token <num> MONITOR_LAYOUT 980bbfda8aSnia%token <num> RPLAY_SOUNDS 990bbfda8aSnia%token <num> FORCE_FOCUS 100645f5050Syouri%token <ptr> STRING 101645f5050Syouri 102645f5050Syouri%type <ptr> string 103645f5050Syouri%type <num> action button number signed_number keyaction full fullkey 1040bbfda8aSnia%type <num> vgrav hgrav 105645f5050Syouri 106645f5050Syouri%start twmrc 107645f5050Syouri 108645f5050Syouri%% 1090bbfda8aSniatwmrc : { InitGramVariables(); } 1100bbfda8aSnia stmts 111645f5050Syouri ; 112645f5050Syouri 113645f5050Syouristmts : /* Empty */ 114645f5050Syouri | stmts stmt 115645f5050Syouri ; 116645f5050Syouri 117645f5050Syouristmt : error 118645f5050Syouri | noarg 119645f5050Syouri | sarg 120645f5050Syouri | narg 121645f5050Syouri | squeeze 1220bbfda8aSnia | ICON_REGION string vgrav hgrav number number { 1230bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 124645f5050Syouri } 1250bbfda8aSnia | ICON_REGION string vgrav hgrav number number string { 1260bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 127645f5050Syouri } 1280bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string { 1290bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 130645f5050Syouri } 1310bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string string { 1320bbfda8aSnia AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 133645f5050Syouri } 1340bbfda8aSnia | ICON_REGION string vgrav hgrav number number { 1350bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, "undef", "undef", "undef"); 136645f5050Syouri } 137645f5050Syouri win_list 1380bbfda8aSnia | ICON_REGION string vgrav hgrav number number string { 1390bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, "undef", "undef"); 140645f5050Syouri } 141645f5050Syouri win_list 1420bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string { 1430bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, $8, "undef"); 144645f5050Syouri } 145645f5050Syouri win_list 1460bbfda8aSnia | ICON_REGION string vgrav hgrav number number string string string { 1470bbfda8aSnia curplist = AddIconRegion($2, $3, $4, $5, $6, $7, $8, $9); 148645f5050Syouri } 149645f5050Syouri win_list 150645f5050Syouri 1510bbfda8aSnia | WINDOW_REGION string vgrav hgrav { 1520bbfda8aSnia curplist = AddWindowRegion ($2, $3, $4); 153645f5050Syouri } 154645f5050Syouri win_list 155645f5050Syouri 156645f5050Syouri | WINDOW_BOX string string { 157df1c27a6Snia#ifdef WINBOX 1580bbfda8aSnia curplist = addWindowBox ($2, $3); 159df1c27a6Snia#endif 160645f5050Syouri } 161645f5050Syouri win_list 162645f5050Syouri 163645f5050Syouri | ICONMGR_GEOMETRY string number { if (Scr->FirstTime) 164645f5050Syouri { 165645f5050Syouri Scr->iconmgr->geometry= (char*)$2; 166645f5050Syouri Scr->iconmgr->columns=$3; 167645f5050Syouri } 168645f5050Syouri } 169645f5050Syouri | ICONMGR_GEOMETRY string { if (Scr->FirstTime) 170645f5050Syouri Scr->iconmgr->geometry = (char*)$2; 171645f5050Syouri } 172645f5050Syouri | WORKSPCMGR_GEOMETRY string number { if (Scr->FirstTime) 173645f5050Syouri { 174645f5050Syouri Scr->workSpaceMgr.geometry= (char*)$2; 175645f5050Syouri Scr->workSpaceMgr.columns=$3; 176645f5050Syouri } 177645f5050Syouri } 178645f5050Syouri | WORKSPCMGR_GEOMETRY string { if (Scr->FirstTime) 179645f5050Syouri Scr->workSpaceMgr.geometry = (char*)$2; 180645f5050Syouri } 181645f5050Syouri | MAPWINDOWCURRENTWORKSPACE {} 182645f5050Syouri curwork 183645f5050Syouri 184645f5050Syouri | MAPWINDOWDEFAULTWORKSPACE {} 185645f5050Syouri defwork 186645f5050Syouri 187645f5050Syouri | ZOOM number { if (Scr->FirstTime) 188645f5050Syouri { 1890bbfda8aSnia Scr->DoZoom = true; 190645f5050Syouri Scr->ZoomCount = $2; 191645f5050Syouri } 192645f5050Syouri } 193645f5050Syouri | ZOOM { if (Scr->FirstTime) 1940bbfda8aSnia Scr->DoZoom = true; } 195645f5050Syouri | PIXMAPS pixmap_list {} 196645f5050Syouri | CURSORS cursor_list {} 1970bbfda8aSnia | ICONIFY_BY_UNMAPPING { curplist = &Scr->IconifyByUn; } 198645f5050Syouri win_list 199645f5050Syouri | ICONIFY_BY_UNMAPPING { if (Scr->FirstTime) 2000bbfda8aSnia Scr->IconifyByUnmapping = true; } 201645f5050Syouri 2020bbfda8aSnia | OPAQUEMOVE { curplist = &Scr->OpaqueMoveList; } 203645f5050Syouri win_list 2040bbfda8aSnia | OPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = true; } 2050bbfda8aSnia | NOOPAQUEMOVE { curplist = &Scr->NoOpaqueMoveList; } 206645f5050Syouri win_list 2070bbfda8aSnia | NOOPAQUEMOVE { if (Scr->FirstTime) Scr->DoOpaqueMove = false; } 2080bbfda8aSnia | OPAQUERESIZE { curplist = &Scr->OpaqueMoveList; } 209645f5050Syouri win_list 2100bbfda8aSnia | OPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = true; } 2110bbfda8aSnia | NOOPAQUERESIZE { curplist = &Scr->NoOpaqueResizeList; } 212645f5050Syouri win_list 2130bbfda8aSnia | NOOPAQUERESIZE { if (Scr->FirstTime) Scr->DoOpaqueResize = false; } 214645f5050Syouri 215645f5050Syouri | LEFT_TITLEBUTTON string EQUALS action { 2160bbfda8aSnia GotTitleButton ($2, $4, false); 217645f5050Syouri } 218645f5050Syouri | RIGHT_TITLEBUTTON string EQUALS action { 2190bbfda8aSnia GotTitleButton ($2, $4, true); 220645f5050Syouri } 2210bbfda8aSnia | LEFT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, false, true); } 222645f5050Syouri binding_list 2230bbfda8aSnia | RIGHT_TITLEBUTTON string { CreateTitleButton($2, 0, NULL, NULL, true, true); } 224645f5050Syouri binding_list 225645f5050Syouri | button string { 2260bbfda8aSnia root = GetRoot($2, NULL, NULL); 2270bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, F_MENU, root, NULL); 228645f5050Syouri } 229645f5050Syouri | button action { 230645f5050Syouri if ($2 == F_MENU) { 231645f5050Syouri pull->prev = NULL; 2320bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, $2, pull, NULL); 233645f5050Syouri } 234645f5050Syouri else { 235645f5050Syouri MenuItem *item; 236645f5050Syouri 2370bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 238645f5050Syouri item = AddToMenu (root, "x", Action, 2390bbfda8aSnia NULL, $2, NULL, NULL); 2400bbfda8aSnia AddFuncButton ($1, C_ROOT, 0, $2, NULL, item); 241645f5050Syouri } 242645f5050Syouri Action = ""; 243645f5050Syouri pull = NULL; 244645f5050Syouri } 245645f5050Syouri | string fullkey { GotKey($1, $2); } 246645f5050Syouri | button full { GotButton($1, $2); } 247645f5050Syouri 2480bbfda8aSnia | DONT_ICONIFY_BY_UNMAPPING { curplist = &Scr->DontIconify; } 249645f5050Syouri win_list 250645f5050Syouri | WORKSPACES {} 251645f5050Syouri workspc_list 2520bbfda8aSnia | IGNOREMODIFIER 2530bbfda8aSnia { mods = 0; } 2540bbfda8aSnia LB keys 2550bbfda8aSnia { Scr->IgnoreModifier |= mods; mods = 0; } 2560bbfda8aSnia RB 2570bbfda8aSnia | OCCUPYALL { curplist = &Scr->OccupyAll; } 258645f5050Syouri win_list 2590bbfda8aSnia | ICONMENU_DONTSHOW { curplist = &Scr->IconMenuDontShow; } 260645f5050Syouri win_list 261645f5050Syouri | OCCUPYLIST {} 262645f5050Syouri occupy_list 2630bbfda8aSnia | UNMAPBYMOVINGFARAWAY { curplist = &Scr->UnmapByMovingFarAway; } 264645f5050Syouri win_list 2650bbfda8aSnia | AUTOSQUEEZE { curplist = &Scr->AutoSqueeze; } 266645f5050Syouri win_list 2670bbfda8aSnia | STARTSQUEEZED { curplist = &Scr->StartSqueezed; } 268645f5050Syouri win_list 2690bbfda8aSnia | ALWAYSSQUEEZETOGRAVITY { Scr->AlwaysSqueezeToGravity = true; } 2700bbfda8aSnia | ALWAYSSQUEEZETOGRAVITY { curplist = &Scr->AlwaysSqueezeToGravityL; } 271645f5050Syouri win_list 2720bbfda8aSnia | DONTSETINACTIVE { curplist = &Scr->DontSetInactive; } 273645f5050Syouri win_list 2740bbfda8aSnia | ICONMGR_NOSHOW { curplist = &Scr->IconMgrNoShow; } 275645f5050Syouri win_list 2760bbfda8aSnia | ICONMGR_NOSHOW { Scr->IconManagerDontShow = true; } 2770bbfda8aSnia | ICONMGRS { curplist = &Scr->IconMgrs; } 278645f5050Syouri iconm_list 2790bbfda8aSnia | ICONMGR_SHOW { curplist = &Scr->IconMgrShow; } 280645f5050Syouri win_list 2810bbfda8aSnia | NO_TITLE_HILITE { curplist = &Scr->NoTitleHighlight; } 282645f5050Syouri win_list 283645f5050Syouri | NO_TITLE_HILITE { if (Scr->FirstTime) 2840bbfda8aSnia Scr->TitleHighlight = false; } 2850bbfda8aSnia | NO_HILITE { curplist = &Scr->NoHighlight; } 286645f5050Syouri win_list 287645f5050Syouri | NO_HILITE { if (Scr->FirstTime) 2880bbfda8aSnia Scr->Highlight = false; } 2890bbfda8aSnia | ON_TOP_PRIORITY signed_number 2900bbfda8aSnia { OtpScrSetZero(Scr, WinWin, $2); } 2910bbfda8aSnia | ON_TOP_PRIORITY ICONS signed_number 2920bbfda8aSnia { OtpScrSetZero(Scr, IconWin, $3); } 2930bbfda8aSnia | ON_TOP_PRIORITY signed_number 2940bbfda8aSnia { curplist = OtpScrPriorityL(Scr, WinWin, $2); } 2950bbfda8aSnia win_list 2960bbfda8aSnia | ON_TOP_PRIORITY ICONS signed_number 2970bbfda8aSnia { curplist = OtpScrPriorityL(Scr, IconWin, $3); } 2980bbfda8aSnia win_list 2990bbfda8aSnia | ALWAYS_ON_TOP { curplist = OtpScrPriorityL(Scr, WinWin, 8); } 3000bbfda8aSnia win_list 3010bbfda8aSnia | PRIORITY_SWITCHING { OtpScrSetSwitching(Scr, WinWin, false); 3020bbfda8aSnia curplist = OtpScrSwitchingL(Scr, WinWin); } 3030bbfda8aSnia win_list 3040bbfda8aSnia | PRIORITY_NOT_SWITCHING { OtpScrSetSwitching(Scr, WinWin, true); 3050bbfda8aSnia curplist = OtpScrSwitchingL(Scr, WinWin); } 306645f5050Syouri win_list 3070bbfda8aSnia | PRIORITY_SWITCHING ICONS 3080bbfda8aSnia { OtpScrSetSwitching(Scr, IconWin, false); 3090bbfda8aSnia curplist = OtpScrSwitchingL(Scr, IconWin); } 3100bbfda8aSnia win_list 3110bbfda8aSnia | PRIORITY_NOT_SWITCHING ICONS 3120bbfda8aSnia { OtpScrSetSwitching(Scr, IconWin, true); 3130bbfda8aSnia curplist = OtpScrSwitchingL(Scr, IconWin); } 3140bbfda8aSnia win_list 3150bbfda8aSnia 3160bbfda8aSnia win_list 3170bbfda8aSnia | NO_STACKMODE { curplist = &Scr->NoStackModeL; } 318645f5050Syouri win_list 319645f5050Syouri | NO_STACKMODE { if (Scr->FirstTime) 3200bbfda8aSnia Scr->StackMode = false; } 3210bbfda8aSnia | NO_BORDER { curplist = &Scr->NoBorder; } 3220bbfda8aSnia win_list 3230bbfda8aSnia | AUTO_POPUP { Scr->AutoPopup = true; } 3240bbfda8aSnia | AUTO_POPUP { curplist = &Scr->AutoPopupL; } 325645f5050Syouri win_list 326df1c27a6Snia | DONT_SAVE { 327df1c27a6Snia#ifndef SESSION 328df1c27a6Snia twmrc_error_prefix(); 329df1c27a6Snia fprintf(stderr, "DontSave ignored; session support " 330df1c27a6Snia "disabled.\n"); 331df1c27a6Snia#endif 332df1c27a6Snia curplist = &Scr->DontSave; 333df1c27a6Snia } 334645f5050Syouri win_list 3350bbfda8aSnia | NO_ICON_TITLE { curplist = &Scr->NoIconTitle; } 336645f5050Syouri win_list 337645f5050Syouri | NO_ICON_TITLE { if (Scr->FirstTime) 3380bbfda8aSnia Scr->NoIconTitlebar = true; } 3390bbfda8aSnia | NO_TITLE { curplist = &Scr->NoTitle; } 340645f5050Syouri win_list 341645f5050Syouri | NO_TITLE { if (Scr->FirstTime) 3420bbfda8aSnia Scr->NoTitlebar = true; } 3430bbfda8aSnia | IGNORE_TRANSIENT { curplist = &Scr->IgnoreTransientL; } 3440bbfda8aSnia win_list 3450bbfda8aSnia | MAKE_TITLE { curplist = &Scr->MakeTitle; } 346645f5050Syouri win_list 3470bbfda8aSnia | START_ICONIFIED { curplist = &Scr->StartIconified; } 348645f5050Syouri win_list 3490bbfda8aSnia | AUTO_RAISE { curplist = &Scr->AutoRaise; } 350645f5050Syouri win_list 3510bbfda8aSnia | AUTO_RAISE { Scr->AutoRaiseDefault = true; } 3520bbfda8aSnia | WARP_ON_DEICONIFY { curplist = &Scr->WarpOnDeIconify; } 353645f5050Syouri win_list 3540bbfda8aSnia | AUTO_LOWER { curplist = &Scr->AutoLower; } 355645f5050Syouri win_list 3560bbfda8aSnia | AUTO_LOWER { Scr->AutoLowerDefault = true; } 357645f5050Syouri | MENU string LP string COLON string RP { 358645f5050Syouri root = GetRoot($2, $4, $6); } 3590bbfda8aSnia menu { root->real_menu = true;} 3600bbfda8aSnia | MENU string { root = GetRoot($2, NULL, NULL); } 3610bbfda8aSnia menu { root->real_menu = true; } 3620bbfda8aSnia | FUNCTION string { root = GetRoot($2, NULL, NULL); } 363645f5050Syouri function 3640bbfda8aSnia | ICONS { curplist = &Scr->IconNames; } 365645f5050Syouri icon_list 366645f5050Syouri | COLOR { color = COLOR; } 367645f5050Syouri color_list 368645f5050Syouri | SAVECOLOR {} 369645f5050Syouri save_color_list 370645f5050Syouri | MONOCHROME { color = MONOCHROME; } 371645f5050Syouri color_list 372645f5050Syouri | DEFAULT_FUNCTION action { Scr->DefaultFunction.func = $2; 373645f5050Syouri if ($2 == F_MENU) 374645f5050Syouri { 375645f5050Syouri pull->prev = NULL; 376645f5050Syouri Scr->DefaultFunction.menu = pull; 377645f5050Syouri } 378645f5050Syouri else 379645f5050Syouri { 3800bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 381645f5050Syouri Scr->DefaultFunction.item = 382645f5050Syouri AddToMenu(root,"x",Action, 3830bbfda8aSnia NULL,$2, NULL, NULL); 384645f5050Syouri } 385645f5050Syouri Action = ""; 386645f5050Syouri pull = NULL; 387645f5050Syouri } 388645f5050Syouri | WINDOW_FUNCTION action { Scr->WindowFunction.func = $2; 3890bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 390645f5050Syouri Scr->WindowFunction.item = 391645f5050Syouri AddToMenu(root,"x",Action, 3920bbfda8aSnia NULL,$2, NULL, NULL); 393645f5050Syouri Action = ""; 394645f5050Syouri pull = NULL; 395645f5050Syouri } 396645f5050Syouri | CHANGE_WORKSPACE_FUNCTION action { Scr->ChangeWorkspaceFunction.func = $2; 3970bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 398645f5050Syouri Scr->ChangeWorkspaceFunction.item = 399645f5050Syouri AddToMenu(root,"x",Action, 4000bbfda8aSnia NULL,$2, NULL, NULL); 401645f5050Syouri Action = ""; 402645f5050Syouri pull = NULL; 403645f5050Syouri } 404645f5050Syouri | DEICONIFY_FUNCTION action { Scr->DeIconifyFunction.func = $2; 4050bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 406645f5050Syouri Scr->DeIconifyFunction.item = 407645f5050Syouri AddToMenu(root,"x",Action, 4080bbfda8aSnia NULL,$2, NULL, NULL); 409645f5050Syouri Action = ""; 410645f5050Syouri pull = NULL; 411645f5050Syouri } 412645f5050Syouri | ICONIFY_FUNCTION action { Scr->IconifyFunction.func = $2; 4130bbfda8aSnia root = GetRoot(TWM_ROOT,NULL,NULL); 414645f5050Syouri Scr->IconifyFunction.item = 415645f5050Syouri AddToMenu(root,"x",Action, 4160bbfda8aSnia NULL,$2, NULL, NULL); 417645f5050Syouri Action = ""; 418645f5050Syouri pull = NULL; 419645f5050Syouri } 4200bbfda8aSnia | WARP_CURSOR { curplist = &Scr->WarpCursorL; } 421645f5050Syouri win_list 422645f5050Syouri | WARP_CURSOR { if (Scr->FirstTime) 4230bbfda8aSnia Scr->WarpCursor = true; } 4240bbfda8aSnia | WINDOW_RING { curplist = &Scr->WindowRingL; } 425645f5050Syouri win_list 4260bbfda8aSnia | WINDOW_RING { Scr->WindowRingAll = true; } 427645f5050Syouri | WINDOW_RING_EXCLUDE { if (!Scr->WindowRingL) 4280bbfda8aSnia Scr->WindowRingAll = true; 4290bbfda8aSnia curplist = &Scr->WindowRingExcludeL; } 430645f5050Syouri win_list 431645f5050Syouri | WINDOW_GEOMETRIES { } 432645f5050Syouri wingeom_list 433645f5050Syouri | VIRTUAL_SCREENS { } 434df1c27a6Snia vscreen_geom_list 4350bbfda8aSnia | EWMH_IGNORE { } 4360bbfda8aSnia ewmh_ignore_list 4370bbfda8aSnia | MWM_IGNORE { } 4380bbfda8aSnia mwm_ignore_list 439df1c27a6Snia | MONITOR_LAYOUT { init_layout_override(); } 440df1c27a6Snia layout_geom_list 4410bbfda8aSnia | RPLAY_SOUNDS { } 4420bbfda8aSnia rplay_sounds_list 4430bbfda8aSnia | FORCE_FOCUS { Scr->ForceFocus = true; } 4440bbfda8aSnia | FORCE_FOCUS { curplist = &Scr->ForceFocusL; } 4450bbfda8aSnia win_list 446645f5050Syouri ; 447645f5050Syouri 448645f5050Syourinoarg : KEYWORD { if (!do_single_keyword ($1)) { 449645f5050Syouri twmrc_error_prefix(); 450645f5050Syouri fprintf (stderr, 451645f5050Syouri "unknown singleton keyword %d\n", 452645f5050Syouri $1); 4530bbfda8aSnia ParseError = true; 454645f5050Syouri } 455645f5050Syouri } 456645f5050Syouri ; 457645f5050Syouri 458645f5050Syourisarg : SKEYWORD string { if (!do_string_keyword ($1, $2)) { 459645f5050Syouri twmrc_error_prefix(); 460645f5050Syouri fprintf (stderr, 461645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 462645f5050Syouri $1, $2); 4630bbfda8aSnia ParseError = true; 464645f5050Syouri } 465645f5050Syouri } 4660bbfda8aSnia | SKEYWORD { if (!do_string_keyword ($1, DEFSTRING)) { 467645f5050Syouri twmrc_error_prefix(); 468645f5050Syouri fprintf (stderr, 469645f5050Syouri "unknown string keyword %d (no value)\n", 470645f5050Syouri $1); 4710bbfda8aSnia ParseError = true; 472645f5050Syouri } 473645f5050Syouri } 474645f5050Syouri ; 475645f5050Syouri 476645f5050Syourisarg : SSKEYWORD string string 477645f5050Syouri { if (!do_string_string_keyword ($1, $2, $3)) { 478645f5050Syouri twmrc_error_prefix(); 479645f5050Syouri fprintf (stderr, 480645f5050Syouri "unknown strings keyword %d (value \"%s\" and \"%s\")\n", 481645f5050Syouri $1, $2, $3); 4820bbfda8aSnia ParseError = true; 483645f5050Syouri } 484645f5050Syouri } 4850bbfda8aSnia | SSKEYWORD string { if (!do_string_string_keyword ($1, $2, NULL)) { 486645f5050Syouri twmrc_error_prefix(); 487645f5050Syouri fprintf (stderr, 488645f5050Syouri "unknown string keyword %d (value \"%s\")\n", 489645f5050Syouri $1, $2); 4900bbfda8aSnia ParseError = true; 491645f5050Syouri } 492645f5050Syouri } 4930bbfda8aSnia | SSKEYWORD { if (!do_string_string_keyword ($1, NULL, NULL)) { 494645f5050Syouri twmrc_error_prefix(); 495645f5050Syouri fprintf (stderr, 496645f5050Syouri "unknown string keyword %d (no value)\n", 497645f5050Syouri $1); 4980bbfda8aSnia ParseError = true; 499645f5050Syouri } 500645f5050Syouri } 501645f5050Syouri ; 502645f5050Syouri 503645f5050Syourinarg : NKEYWORD number { if (!do_number_keyword ($1, $2)) { 504645f5050Syouri twmrc_error_prefix(); 505645f5050Syouri fprintf (stderr, 506645f5050Syouri "unknown numeric keyword %d (value %d)\n", 507645f5050Syouri $1, $2); 5080bbfda8aSnia ParseError = true; 509645f5050Syouri } 510645f5050Syouri } 511645f5050Syouri ; 512645f5050Syouri 513645f5050Syouri 514645f5050Syouri 515645f5050Syourikeyaction : EQUALS keys COLON action { $$ = $4; } 516645f5050Syouri ; 517645f5050Syouri 518645f5050Syourifull : EQUALS keys COLON contexts COLON action { $$ = $6; } 519645f5050Syouri ; 520645f5050Syouri 521645f5050Syourifullkey : EQUALS keys COLON contextkeys COLON action { $$ = $6; } 522645f5050Syouri ; 523645f5050Syouri 524645f5050Syourikeys : /* Empty */ 525645f5050Syouri | keys key 526645f5050Syouri ; 527645f5050Syouri 528645f5050Syourikey : META { mods |= Mod1Mask; } 529645f5050Syouri | SHIFT { mods |= ShiftMask; } 530645f5050Syouri | LOCK { mods |= LockMask; } 531645f5050Syouri | CONTROL { mods |= ControlMask; } 532645f5050Syouri | ALTER number { if ($2 < 1 || $2 > 5) { 533645f5050Syouri twmrc_error_prefix(); 534645f5050Syouri fprintf (stderr, 5350bbfda8aSnia "bad altkeymap number (%d), must be 1-5\n", 536645f5050Syouri $2); 5370bbfda8aSnia ParseError = true; 538645f5050Syouri } else { 539645f5050Syouri mods |= (Alt1Mask << ($2 - 1)); 540645f5050Syouri } 541645f5050Syouri } 542645f5050Syouri | META number { if ($2 < 1 || $2 > 5) { 543645f5050Syouri twmrc_error_prefix(); 544645f5050Syouri fprintf (stderr, 545645f5050Syouri "bad modifier number (%d), must be 1-5\n", 546645f5050Syouri $2); 5470bbfda8aSnia ParseError = true; 548645f5050Syouri } else { 549645f5050Syouri mods |= (Mod1Mask << ($2 - 1)); 550645f5050Syouri } 551645f5050Syouri } 552645f5050Syouri | OR { } 553645f5050Syouri ; 554645f5050Syouri 5550bbfda8aSniavgrav : GRAVITY { 5560bbfda8aSnia switch($1) { 5570bbfda8aSnia case GRAV_NORTH: 5580bbfda8aSnia case GRAV_SOUTH: 5590bbfda8aSnia /* OK */ 5600bbfda8aSnia $$ = $1; 5610bbfda8aSnia break; 5620bbfda8aSnia default: 5630bbfda8aSnia twmrc_error_prefix(); 5640bbfda8aSnia fprintf(stderr, "Bad vertical gravity '%s'\n", yytext); 5650bbfda8aSnia ParseError = true; 5660bbfda8aSnia YYERROR; 5670bbfda8aSnia } 5680bbfda8aSnia } 5690bbfda8aSnia 5700bbfda8aSniahgrav : GRAVITY { 5710bbfda8aSnia switch($1) { 5720bbfda8aSnia case GRAV_EAST: 5730bbfda8aSnia case GRAV_WEST: 5740bbfda8aSnia /* OK */ 5750bbfda8aSnia $$ = $1; 5760bbfda8aSnia break; 5770bbfda8aSnia default: 5780bbfda8aSnia twmrc_error_prefix(); 5790bbfda8aSnia fprintf(stderr, "Bad horiz gravity '%s'\n", yytext); 5800bbfda8aSnia ParseError = true; 5810bbfda8aSnia YYERROR; 5820bbfda8aSnia } 5830bbfda8aSnia } 5840bbfda8aSnia 585645f5050Syouricontexts : /* Empty */ 586645f5050Syouri | contexts context 587645f5050Syouri ; 588645f5050Syouri 589645f5050Syouricontext : WINDOW { cont |= C_WINDOW_BIT; } 590645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 591645f5050Syouri | ICON { cont |= C_ICON_BIT; } 592645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 593645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 594645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 595645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 596645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 597645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 598645f5050Syouri | ALL { cont |= C_ALL_BITS; } 5990bbfda8aSnia | OR { } 600645f5050Syouri ; 601645f5050Syouri 602645f5050Syouricontextkeys : /* Empty */ 603645f5050Syouri | contextkeys contextkey 604645f5050Syouri ; 605645f5050Syouri 606645f5050Syouricontextkey : WINDOW { cont |= C_WINDOW_BIT; } 607645f5050Syouri | TITLE { cont |= C_TITLE_BIT; } 608645f5050Syouri | ICON { cont |= C_ICON_BIT; } 609645f5050Syouri | ROOT { cont |= C_ROOT_BIT; } 610645f5050Syouri | FRAME { cont |= C_FRAME_BIT; } 611645f5050Syouri | WORKSPACE { cont |= C_WORKSPACE_BIT; } 612645f5050Syouri | ICONMGR { cont |= C_ICONMGR_BIT; } 613645f5050Syouri | META { cont |= C_ICONMGR_BIT; } 614645f5050Syouri | ALTER { cont |= C_ALTER_BIT; } 6150bbfda8aSnia | ALL { cont |= C_ALL_BITS; } 616645f5050Syouri | OR { } 617645f5050Syouri | string { Name = (char*)$1; cont |= C_NAME_BIT; } 618645f5050Syouri ; 619645f5050Syouri 620645f5050Syouri 621645f5050Syouribinding_list : LB binding_entries RB {} 622645f5050Syouri ; 623645f5050Syouri 624645f5050Syouribinding_entries : /* Empty */ 625645f5050Syouri | binding_entries binding_entry 626645f5050Syouri ; 627645f5050Syouri 6280bbfda8aSniabinding_entry : button keyaction { SetCurrentTBAction($1, mods, $2, Action, pull); mods = 0;} 6290bbfda8aSnia | button EQUALS action { SetCurrentTBAction($1, 0, $3, Action, pull);} 6300bbfda8aSnia | button COLON action { 6310bbfda8aSnia /* Deprecated since 3.8, no longer supported */ 6320bbfda8aSnia yyerror("Title buttons specifications without = are no " 6330bbfda8aSnia "longer supported."); 6340bbfda8aSnia } 635645f5050Syouri ; 636645f5050Syouri 637645f5050Syouri 638645f5050Syouripixmap_list : LB pixmap_entries RB {} 639645f5050Syouri ; 640645f5050Syouri 641645f5050Syouripixmap_entries : /* Empty */ 642645f5050Syouri | pixmap_entries pixmap_entry 643645f5050Syouri ; 644645f5050Syouri 6450bbfda8aSniapixmap_entry : TITLE_HILITE string { Scr->HighlightPixmapName = strdup($2); } 646645f5050Syouri ; 647645f5050Syouri 648645f5050Syouri 649645f5050Syouricursor_list : LB cursor_entries RB {} 650645f5050Syouri ; 651645f5050Syouri 652645f5050Syouricursor_entries : /* Empty */ 653645f5050Syouri | cursor_entries cursor_entry 654645f5050Syouri ; 655645f5050Syouri 656645f5050Syouricursor_entry : FRAME string string { 657645f5050Syouri NewBitmapCursor(&Scr->FrameCursor, $2, $3); } 658645f5050Syouri | FRAME string { 659645f5050Syouri NewFontCursor(&Scr->FrameCursor, $2); } 660645f5050Syouri | TITLE string string { 661645f5050Syouri NewBitmapCursor(&Scr->TitleCursor, $2, $3); } 662645f5050Syouri | TITLE string { 663645f5050Syouri NewFontCursor(&Scr->TitleCursor, $2); } 664645f5050Syouri | ICON string string { 665645f5050Syouri NewBitmapCursor(&Scr->IconCursor, $2, $3); } 666645f5050Syouri | ICON string { 667645f5050Syouri NewFontCursor(&Scr->IconCursor, $2); } 668645f5050Syouri | ICONMGR string string { 669645f5050Syouri NewBitmapCursor(&Scr->IconMgrCursor, $2, $3); } 670645f5050Syouri | ICONMGR string { 671645f5050Syouri NewFontCursor(&Scr->IconMgrCursor, $2); } 672645f5050Syouri | BUTTON string string { 673645f5050Syouri NewBitmapCursor(&Scr->ButtonCursor, $2, $3); } 674645f5050Syouri | BUTTON string { 675645f5050Syouri NewFontCursor(&Scr->ButtonCursor, $2); } 676645f5050Syouri | MOVE string string { 677645f5050Syouri NewBitmapCursor(&Scr->MoveCursor, $2, $3); } 678645f5050Syouri | MOVE string { 679645f5050Syouri NewFontCursor(&Scr->MoveCursor, $2); } 680645f5050Syouri | RESIZE string string { 681645f5050Syouri NewBitmapCursor(&Scr->ResizeCursor, $2, $3); } 682645f5050Syouri | RESIZE string { 683645f5050Syouri NewFontCursor(&Scr->ResizeCursor, $2); } 684645f5050Syouri | WAITC string string { 685645f5050Syouri NewBitmapCursor(&Scr->WaitCursor, $2, $3); } 686645f5050Syouri | WAITC string { 687645f5050Syouri NewFontCursor(&Scr->WaitCursor, $2); } 688645f5050Syouri | MENU string string { 689645f5050Syouri NewBitmapCursor(&Scr->MenuCursor, $2, $3); } 690645f5050Syouri | MENU string { 691645f5050Syouri NewFontCursor(&Scr->MenuCursor, $2); } 692645f5050Syouri | SELECT string string { 693645f5050Syouri NewBitmapCursor(&Scr->SelectCursor, $2, $3); } 694645f5050Syouri | SELECT string { 695645f5050Syouri NewFontCursor(&Scr->SelectCursor, $2); } 696645f5050Syouri | KILL string string { 697645f5050Syouri NewBitmapCursor(&Scr->DestroyCursor, $2, $3); } 698645f5050Syouri | KILL string { 699645f5050Syouri NewFontCursor(&Scr->DestroyCursor, $2); } 700645f5050Syouri ; 701645f5050Syouri 702645f5050Syouricolor_list : LB color_entries RB {} 703645f5050Syouri ; 704645f5050Syouri 705645f5050Syouri 706645f5050Syouricolor_entries : /* Empty */ 707645f5050Syouri | color_entries color_entry 708645f5050Syouri ; 709645f5050Syouri 710645f5050Syouricolor_entry : CLKEYWORD string { if (!do_colorlist_keyword ($1, color, 711645f5050Syouri $2)) { 712645f5050Syouri twmrc_error_prefix(); 713645f5050Syouri fprintf (stderr, 714645f5050Syouri "unhandled list color keyword %d (string \"%s\")\n", 715645f5050Syouri $1, $2); 7160bbfda8aSnia ParseError = true; 717645f5050Syouri } 718645f5050Syouri } 7190bbfda8aSnia | CLKEYWORD string { curplist = do_colorlist_keyword($1,color, 720645f5050Syouri $2); 7210bbfda8aSnia if (!curplist) { 722645f5050Syouri twmrc_error_prefix(); 723645f5050Syouri fprintf (stderr, 724645f5050Syouri "unhandled color list keyword %d (string \"%s\")\n", 725645f5050Syouri $1, $2); 7260bbfda8aSnia ParseError = true; 727645f5050Syouri } 728645f5050Syouri } 729645f5050Syouri win_color_list 730645f5050Syouri | CKEYWORD string { if (!do_color_keyword ($1, color, 731645f5050Syouri $2)) { 732645f5050Syouri twmrc_error_prefix(); 733645f5050Syouri fprintf (stderr, 734645f5050Syouri "unhandled color keyword %d (string \"%s\")\n", 735645f5050Syouri $1, $2); 7360bbfda8aSnia ParseError = true; 737645f5050Syouri } 738645f5050Syouri } 739645f5050Syouri ; 740645f5050Syouri 741645f5050Syourisave_color_list : LB s_color_entries RB {} 742645f5050Syouri ; 743645f5050Syouri 744645f5050Syouris_color_entries : /* Empty */ 745645f5050Syouri | s_color_entries s_color_entry 746645f5050Syouri ; 747645f5050Syouri 748645f5050Syouris_color_entry : string { do_string_savecolor(color, $1); } 749645f5050Syouri | CLKEYWORD { do_var_savecolor($1); } 750645f5050Syouri ; 751645f5050Syouri 752645f5050Syouriwin_color_list : LB win_color_entries RB {} 753645f5050Syouri ; 754645f5050Syouri 755645f5050Syouriwin_color_entries : /* Empty */ 756645f5050Syouri | win_color_entries win_color_entry 757645f5050Syouri ; 758645f5050Syouri 759645f5050Syouriwin_color_entry : string string { if (Scr->FirstTime && 760645f5050Syouri color == Scr->Monochrome) 7610bbfda8aSnia AddToList(curplist, $1, $2); } 762645f5050Syouri ; 763645f5050Syouri 764645f5050Syouriwingeom_list : LB wingeom_entries RB {} 765645f5050Syouri ; 766645f5050Syouri 767645f5050Syouriwingeom_entries : /* Empty */ 768645f5050Syouri | wingeom_entries wingeom_entry 769645f5050Syouri ; 770645f5050Syouri/* added a ';' after call to AddToList */ 771645f5050Syouriwingeom_entry : string string { AddToList (&Scr->WindowGeometries, $1, $2); } 772645f5050Syouri ; 773645f5050Syouri 774df1c27a6Sniavscreen_geom_list : LB vscreen_geom_entries RB {} 775645f5050Syouri ; 776645f5050Syouri 777df1c27a6Sniavscreen_geom_entries : /* Empty */ 778df1c27a6Snia | vscreen_geom_entries vscreen_geom_entry 779645f5050Syouri ; 780645f5050Syouri 781df1c27a6Sniavscreen_geom_entry : string { 782df1c27a6Snia#ifdef VSCREEN 783df1c27a6Snia AddToList (&Scr->VirtualScreens, $1, ""); 784df1c27a6Snia#endif 785df1c27a6Snia } 786645f5050Syouri ; 787645f5050Syouri 7880bbfda8aSnia 7890bbfda8aSniaewmh_ignore_list : LB ewmh_ignore_entries RB { proc_ewmh_ignore(); } 7900bbfda8aSnia ; 7910bbfda8aSnia 7920bbfda8aSniaewmh_ignore_entries : /* Empty */ 7930bbfda8aSnia | ewmh_ignore_entries ewmh_ignore_entry 7940bbfda8aSnia ; 7950bbfda8aSnia 7960bbfda8aSniaewmh_ignore_entry : string { add_ewmh_ignore($1); } 7970bbfda8aSnia ; 7980bbfda8aSnia 7990bbfda8aSnia 8000bbfda8aSniamwm_ignore_list : LB mwm_ignore_entries RB { proc_mwm_ignore(); } 8010bbfda8aSnia ; 8020bbfda8aSnia 8030bbfda8aSniamwm_ignore_entries : /* Empty */ 8040bbfda8aSnia | mwm_ignore_entries mwm_ignore_entry 8050bbfda8aSnia ; 8060bbfda8aSnia 8070bbfda8aSniamwm_ignore_entry : string { add_mwm_ignore($1); } 8080bbfda8aSnia ; 8090bbfda8aSnia 8100bbfda8aSnia 811df1c27a6Snialayout_geom_list : LB layout_geom_entries RB { proc_layout_override(); } 812df1c27a6Snia ; 813df1c27a6Snia 814df1c27a6Snialayout_geom_entries : /* Empty */ 815df1c27a6Snia | layout_geom_entries layout_geom_entry 816df1c27a6Snia ; 817df1c27a6Snia 818df1c27a6Snialayout_geom_entry : string { add_layout_override_entry($1); } 819df1c27a6Snia ; 820df1c27a6Snia 821df1c27a6Snia 822645f5050Syourisqueeze : SQUEEZE_TITLE { 8230bbfda8aSnia if (HasShape) Scr->SqueezeTitle = true; 824645f5050Syouri } 8250bbfda8aSnia | SQUEEZE_TITLE { curplist = &Scr->SqueezeTitleL; 8260bbfda8aSnia if (HasShape) 8270bbfda8aSnia Scr->SqueezeTitle = true; 828645f5050Syouri } 829645f5050Syouri LB win_sqz_entries RB 8300bbfda8aSnia | DONT_SQUEEZE_TITLE { Scr->SqueezeTitle = false; } 8310bbfda8aSnia | DONT_SQUEEZE_TITLE { curplist = &Scr->DontSqueezeTitleL; } 832645f5050Syouri win_list 833645f5050Syouri ; 834645f5050Syouri 835645f5050Syouriwin_sqz_entries : /* Empty */ 8360bbfda8aSnia | win_sqz_entries string SIJENUM signed_number number { 837645f5050Syouri if (Scr->FirstTime) { 8380bbfda8aSnia do_squeeze_entry (curplist, $2, $3, $4, $5); 839645f5050Syouri } 840645f5050Syouri } 841645f5050Syouri ; 842645f5050Syouri 843645f5050Syouri 844645f5050Syouriiconm_list : LB iconm_entries RB {} 845645f5050Syouri ; 846645f5050Syouri 847645f5050Syouriiconm_entries : /* Empty */ 848645f5050Syouri | iconm_entries iconm_entry 849645f5050Syouri ; 850645f5050Syouri 851645f5050Syouriiconm_entry : string string number { if (Scr->FirstTime) 8520bbfda8aSnia AddToList(curplist, $1, 8530bbfda8aSnia AllocateIconManager($1, NULL, 854645f5050Syouri $2,$3)); 855645f5050Syouri } 856645f5050Syouri | string string string number 857645f5050Syouri { if (Scr->FirstTime) 8580bbfda8aSnia AddToList(curplist, $1, 859645f5050Syouri AllocateIconManager($1,$2, 860645f5050Syouri $3, $4)); 861645f5050Syouri } 862645f5050Syouri ; 863645f5050Syouri 864645f5050Syouriworkspc_list : LB workspc_entries RB {} 865645f5050Syouri ; 866645f5050Syouri 867645f5050Syouriworkspc_entries : /* Empty */ 868645f5050Syouri | workspc_entries workspc_entry 869645f5050Syouri ; 870645f5050Syouri 871645f5050Syouriworkspc_entry : string { 8720bbfda8aSnia AddWorkSpace ($1, NULL, NULL, NULL, NULL, NULL); 873645f5050Syouri } 874645f5050Syouri | string { 875645f5050Syouri curWorkSpc = (char*)$1; 876645f5050Syouri } 877645f5050Syouri workapp_list 878645f5050Syouri ; 879645f5050Syouri 880645f5050Syouriworkapp_list : LB workapp_entries RB {} 881645f5050Syouri ; 882645f5050Syouri 883645f5050Syouriworkapp_entries : /* Empty */ 884645f5050Syouri | workapp_entries workapp_entry 885645f5050Syouri ; 886645f5050Syouri 887645f5050Syouriworkapp_entry : string { 8880bbfda8aSnia AddWorkSpace (curWorkSpc, $1, NULL, NULL, NULL, NULL); 889645f5050Syouri } 890645f5050Syouri | string string { 8910bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, NULL, NULL, NULL); 892645f5050Syouri } 893645f5050Syouri | string string string { 8940bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, $3, NULL, NULL); 895645f5050Syouri } 896645f5050Syouri | string string string string { 8970bbfda8aSnia AddWorkSpace (curWorkSpc, $1, $2, $3, $4, NULL); 898645f5050Syouri } 899645f5050Syouri | string string string string string { 900645f5050Syouri AddWorkSpace (curWorkSpc, $1, $2, $3, $4, $5); 901645f5050Syouri } 902645f5050Syouri ; 903645f5050Syouri 904645f5050Syouricurwork : LB string RB { 905645f5050Syouri WMapCreateCurrentBackGround ($2, NULL, NULL, NULL); 906645f5050Syouri } 907645f5050Syouri | LB string string RB { 908645f5050Syouri WMapCreateCurrentBackGround ($2, $3, NULL, NULL); 909645f5050Syouri } 910645f5050Syouri | LB string string string RB { 911645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, NULL); 912645f5050Syouri } 913645f5050Syouri | LB string string string string RB { 914645f5050Syouri WMapCreateCurrentBackGround ($2, $3, $4, $5); 915645f5050Syouri } 916645f5050Syouri ; 917645f5050Syouri 918645f5050Syouridefwork : LB string RB { 919645f5050Syouri WMapCreateDefaultBackGround ($2, NULL, NULL, NULL); 920645f5050Syouri } 921645f5050Syouri | LB string string RB { 922645f5050Syouri WMapCreateDefaultBackGround ($2, $3, NULL, NULL); 923645f5050Syouri } 924645f5050Syouri | LB string string string RB { 925645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, NULL); 926645f5050Syouri } 927645f5050Syouri | LB string string string string RB { 928645f5050Syouri WMapCreateDefaultBackGround ($2, $3, $4, $5); 929645f5050Syouri } 930645f5050Syouri ; 931645f5050Syouri 932645f5050Syouriwin_list : LB win_entries RB {} 933645f5050Syouri ; 934645f5050Syouri 935645f5050Syouriwin_entries : /* Empty */ 936645f5050Syouri | win_entries win_entry 937645f5050Syouri ; 938645f5050Syouri 939645f5050Syouriwin_entry : string { if (Scr->FirstTime) 9400bbfda8aSnia AddToList(curplist, $1, 0); 941645f5050Syouri } 942645f5050Syouri ; 943645f5050Syouri 944645f5050Syourioccupy_list : LB occupy_entries RB {} 945645f5050Syouri ; 946645f5050Syouri 947645f5050Syourioccupy_entries : /* Empty */ 948645f5050Syouri | occupy_entries occupy_entry 949645f5050Syouri ; 950645f5050Syouri 951645f5050Syourioccupy_entry : string {client = (char*)$1;} 952645f5050Syouri occupy_workspc_list 953645f5050Syouri | WINDOW string {client = (char*)$2;} 954645f5050Syouri occupy_workspc_list 955645f5050Syouri | WORKSPACE string {workspace = (char*)$2;} 956645f5050Syouri occupy_window_list 957645f5050Syouri ; 958645f5050Syouri 959645f5050Syourioccupy_workspc_list : LB occupy_workspc_entries RB {} 960645f5050Syouri ; 961645f5050Syouri 962645f5050Syourioccupy_workspc_entries : /* Empty */ 963645f5050Syouri | occupy_workspc_entries occupy_workspc_entry 964645f5050Syouri ; 965645f5050Syouri 966645f5050Syourioccupy_workspc_entry : string { 9670bbfda8aSnia if(!AddToClientsList ($1, client)) { 9680bbfda8aSnia twmrc_error_prefix(); 9690bbfda8aSnia fprintf(stderr, "unknown workspace '%s'\n", $1); 9700bbfda8aSnia } 971645f5050Syouri } 972645f5050Syouri ; 973645f5050Syouri 974645f5050Syourioccupy_window_list : LB occupy_window_entries RB {} 975645f5050Syouri ; 976645f5050Syouri 977645f5050Syourioccupy_window_entries : /* Empty */ 978645f5050Syouri | occupy_window_entries occupy_window_entry 979645f5050Syouri ; 980645f5050Syouri 981645f5050Syourioccupy_window_entry : string { 9820bbfda8aSnia if(!AddToClientsList (workspace, $1)) { 9830bbfda8aSnia twmrc_error_prefix(); 9840bbfda8aSnia fprintf(stderr, "unknown workspace '%s'\n", workspace); 9850bbfda8aSnia } 986645f5050Syouri } 987645f5050Syouri ; 988645f5050Syouri 989645f5050Syouriicon_list : LB icon_entries RB {} 990645f5050Syouri ; 991645f5050Syouri 992645f5050Syouriicon_entries : /* Empty */ 993645f5050Syouri | icon_entries icon_entry 994645f5050Syouri ; 995645f5050Syouri 9960bbfda8aSniaicon_entry : string string { if (Scr->FirstTime) AddToList(curplist, $1, $2); } 9970bbfda8aSnia ; 9980bbfda8aSnia 9990bbfda8aSniarplay_sounds_list : LB rplay_sounds_entries RB { 10000bbfda8aSnia#ifndef SOUNDS 10010bbfda8aSnia twmrc_error_prefix(); 10020bbfda8aSnia fprintf(stderr, "RplaySounds ignored; rplay support " 10030bbfda8aSnia "not configured.\n"); 10040bbfda8aSnia#else 10050bbfda8aSnia sound_set_from_config(); 10060bbfda8aSnia#endif 10070bbfda8aSnia } 10080bbfda8aSnia ; 10090bbfda8aSnia 10100bbfda8aSniarplay_sounds_entries : /* Empty */ 10110bbfda8aSnia | rplay_sounds_entries rplay_sounds_entry 10120bbfda8aSnia ; 10130bbfda8aSnia 10140bbfda8aSniarplay_sounds_entry : string string { 10150bbfda8aSnia#ifdef SOUNDS 10160bbfda8aSnia if(set_sound_event_name($1, $2) != 0) { 10170bbfda8aSnia twmrc_error_prefix(); 10180bbfda8aSnia fprintf(stderr, "Failed adding sound for %s; " 10190bbfda8aSnia "maybe event name is invalid?\n", $1); 10200bbfda8aSnia } 10210bbfda8aSnia#endif 10220bbfda8aSnia } 1023645f5050Syouri ; 1024645f5050Syouri 1025645f5050Syourifunction : LB function_entries RB {} 1026645f5050Syouri ; 1027645f5050Syouri 1028645f5050Syourifunction_entries: /* Empty */ 1029645f5050Syouri | function_entries function_entry 1030645f5050Syouri ; 1031645f5050Syouri 1032645f5050Syourifunction_entry : action { AddToMenu(root, "", Action, NULL, $1, 10330bbfda8aSnia NULL, NULL); 1034645f5050Syouri Action = ""; 1035645f5050Syouri } 1036645f5050Syouri ; 1037645f5050Syouri 10380bbfda8aSniamenu : LB menu_entries RB {lastmenuitem = NULL;} 1039645f5050Syouri ; 1040645f5050Syouri 1041645f5050Syourimenu_entries : /* Empty */ 1042645f5050Syouri | menu_entries menu_entry 1043645f5050Syouri ; 1044645f5050Syouri 1045645f5050Syourimenu_entry : string action { 1046645f5050Syouri if ($2 == F_SEPARATOR) { 10470bbfda8aSnia if (lastmenuitem) lastmenuitem->separated = true; 1048645f5050Syouri } 1049645f5050Syouri else { 10500bbfda8aSnia lastmenuitem = AddToMenu(root, $1, Action, pull, $2, NULL, NULL); 1051645f5050Syouri Action = ""; 1052645f5050Syouri pull = NULL; 1053645f5050Syouri } 1054645f5050Syouri } 1055645f5050Syouri | string LP string COLON string RP action { 1056645f5050Syouri if ($7 == F_SEPARATOR) { 10570bbfda8aSnia if (lastmenuitem) lastmenuitem->separated = true; 1058645f5050Syouri } 1059645f5050Syouri else { 1060645f5050Syouri lastmenuitem = AddToMenu(root, $1, Action, pull, $7, $3, $5); 1061645f5050Syouri Action = ""; 1062645f5050Syouri pull = NULL; 1063645f5050Syouri } 1064645f5050Syouri } 1065645f5050Syouri ; 1066645f5050Syouri 1067645f5050Syouriaction : FKEYWORD { $$ = $1; } 1068645f5050Syouri | FSKEYWORD string { 1069645f5050Syouri $$ = $1; 1070645f5050Syouri Action = (char*)$2; 1071645f5050Syouri switch ($1) { 1072645f5050Syouri case F_MENU: 10730bbfda8aSnia pull = GetRoot ($2, NULL,NULL); 1074645f5050Syouri pull->prev = root; 1075645f5050Syouri break; 1076645f5050Syouri case F_WARPRING: 1077645f5050Syouri if (!CheckWarpRingArg (Action)) { 1078645f5050Syouri twmrc_error_prefix(); 1079645f5050Syouri fprintf (stderr, 1080645f5050Syouri "ignoring invalid f.warptoring argument \"%s\"\n", 1081645f5050Syouri Action); 1082645f5050Syouri $$ = F_NOP; 1083645f5050Syouri } 1084df1c27a6Snia break; 1085645f5050Syouri case F_WARPTOSCREEN: 1086645f5050Syouri if (!CheckWarpScreenArg (Action)) { 1087645f5050Syouri twmrc_error_prefix(); 1088645f5050Syouri fprintf (stderr, 1089645f5050Syouri "ignoring invalid f.warptoscreen argument \"%s\"\n", 1090645f5050Syouri Action); 1091645f5050Syouri $$ = F_NOP; 1092645f5050Syouri } 1093645f5050Syouri break; 1094645f5050Syouri case F_COLORMAP: 1095645f5050Syouri if (CheckColormapArg (Action)) { 1096645f5050Syouri $$ = F_COLORMAP; 1097645f5050Syouri } else { 1098645f5050Syouri twmrc_error_prefix(); 1099645f5050Syouri fprintf (stderr, 1100645f5050Syouri "ignoring invalid f.colormap argument \"%s\"\n", 1101645f5050Syouri Action); 1102645f5050Syouri $$ = F_NOP; 1103645f5050Syouri } 1104645f5050Syouri break; 1105645f5050Syouri } /* end switch */ 1106645f5050Syouri } 1107645f5050Syouri ; 1108645f5050Syouri 1109645f5050Syouri 1110645f5050Syourisigned_number : number { $$ = $1; } 1111645f5050Syouri | PLUS number { $$ = $2; } 1112645f5050Syouri | MINUS number { $$ = -($2); } 1113645f5050Syouri ; 1114645f5050Syouri 1115645f5050Syouributton : BUTTON number { $$ = $2; 1116645f5050Syouri if ($2 == 0) 1117645f5050Syouri yyerror("bad button 0"); 1118645f5050Syouri 1119645f5050Syouri if ($2 > MAX_BUTTONS) 1120645f5050Syouri { 1121645f5050Syouri $$ = 0; 1122645f5050Syouri yyerror("button number too large"); 1123645f5050Syouri } 1124645f5050Syouri } 1125645f5050Syouri ; 1126645f5050Syouri 11270bbfda8aSniastring : STRING { char *ptr = strdup($1); 1128645f5050Syouri RemoveDQuote(ptr); 1129645f5050Syouri $$ = ptr; 1130645f5050Syouri } 1131645f5050Syouri ; 1132645f5050Syouri 1133645f5050Syourinumber : NUMBER { $$ = $1; } 1134645f5050Syouri ; 1135645f5050Syouri 1136645f5050Syouri%% 1137