Config.h (16144B)
1 2 #ifndef _CONFIG_H_ 3 #define _CONFIG_H_ 4 5 // ============================ 6 // Configuration header for wmx 7 // ============================ 8 // 9 // To configure: change the relevant bit of the file, and rebuild the 10 // manager. Make sure all necessary source files are built (by 11 // running "make depend" before you start). 12 // 13 // This file is in four sections. (This might imply that it's getting 14 // too long.) The sections are: 15 // 16 // I. Straightforward operational parameters 17 // II. Key bindings 18 // III. Colours and fonts 19 // IV. Flashy stuff: channels, pixmaps, skeletal feedback &c. 20 // 21 // All timing values are in milliseconds, but accuracy depends on the 22 // minimum timer value available to select, so they should be taken 23 // with a pinch of salt. On the machine I'm using now, I mentally 24 // double all the given values. 25 // 26 // -- Chris Cannam, January 1998 27 28 29 // This isn't one of the sections. This is the structure for Stefan 30 // `Sec' Zehl's runtime configuration hack -- see Config.C. It's a 31 // bit incomplete, but works, mostly. Anything in this file that's 32 // #defined to DynamicConfig::config.something() will take its default 33 // from Config.C 34 35 struct DynamicConfigImpl; 36 class DynamicConfig 37 { 38 public: 39 DynamicConfig(); 40 ~DynamicConfig(); 41 void scan(char startup = 0); 42 43 char clickFocus(); 44 char raiseFocus(); 45 char autoRaiseFocus(); 46 int raiseDelay(); 47 char useKeyboard(); 48 char fullMenu(); 49 char useFeedback(); 50 int feedbackDelay(); 51 char disableNew(); 52 char rightCirculate(); 53 char rightLower(); 54 char rightToggleHeight(); 55 char passFocusClick(); 56 int tabMargin(); 57 char *tabForeground(); 58 char *tabBackground(); 59 char *frameBackground(); 60 61 static DynamicConfig config; 62 63 private: 64 DynamicConfigImpl *m_impl; 65 void update(char *); 66 }; 67 68 69 // ================================================= 70 // Section I. Straightforward operational parameters 71 // ================================================= 72 73 // List visible as well as hidden clients on the root menu? (Visible 74 // ones will be towards the bottom of the menu, flush-right.) 75 #define CONFIG_EVERYTHING_ON_ROOT_MENU (DynamicConfig::config.fullMenu()) 76 77 // Spawn a temporary new shell between the wm and each new process? 78 #define CONFIG_EXEC_USING_SHELL False 79 80 // What to run to get a new window (from the "New" menu option) 81 #define CONFIG_NEW_WINDOW_LABEL "New" 82 #define CONFIG_NEW_WINDOW_COMMAND "urxvt" 83 #define CONFIG_NEW_WINDOW_COMMAND_OPTIONS 0 84 // or, for example, 85 //#define CONFIG_NEW_WINDOW_COMMAND_OPTIONS "-ls","-sb","-sl","1024",0 86 // alternatively, 87 #define CONFIG_DISABLE_NEW_WINDOW_COMMAND False 88 89 // Area where [exit wmx] is added (0 -> everywhere -# -> px from other side) 90 #define CONFIG_EXIT_CLICK_SIZE_X 0 91 #define CONFIG_EXIT_CLICK_SIZE_Y -3 92 93 // Directory under $HOME in which to look for commands for the 94 // middle-button menu 95 #define CONFIG_COMMAND_MENU ".wmx" 96 // only used if COMMAND_MENU is not found; ignored if invalid directory: 97 #define CONFIG_SYSTEM_COMMAND_MENU "/usr/local/lib/wmx/menu" 98 // append screennumber to COMMAND_MENU directory; 99 // use non screen style as fallback 100 #define CONFIG_ADD_SCREEN_TO_COMMAND_MENU False 101 102 // Focus possibilities. 103 // 104 // You can't have CLICK_TO_FOCUS without RAISE_ON_FOCUS, but the other 105 // combinations should be okay. If you set AUTO_RAISE you must leave 106 // the other two False; you'll then get focus-follows, auto-raise, and 107 // a delay on auto-raise as configured in the DELAY settings below. 108 109 #define CONFIG_CLICK_TO_FOCUS False 110 #define CONFIG_RAISE_ON_FOCUS False 111 #define CONFIG_AUTO_RAISE False 112 113 #define CONFIG_PASS_FOCUS_CLICK (DynamicConfig::config.passFocusClick()) 114 115 // Delays when using AUTO_RAISE focus method 116 // 117 // In theory these only apply when using AUTO_RAISE, not when just 118 // using RAISE_ON_FOCUS without CLICK_TO_FOCUS. First of these is the 119 // usual delay before raising; second is the delay after the pointer 120 // has stopped moving (only when over simple X windows such as xvt). 121 122 #define CONFIG_AUTO_RAISE_DELAY (DynamicConfig::config.raiseDelay()) 123 #define CONFIG_POINTER_STOPPED_DELAY 80 124 #define CONFIG_DESTROY_WINDOW_DELAY 600 125 126 // Number of pixels off the screen you have to push a window 127 // before the manager notices the window is off-screen (the higher 128 // the value, the easier it is to place windows at the screen edges) 129 130 #define CONFIG_BUMP_DISTANCE 16 131 132 // If CONFIG_BUMP_EVERYWHERE is defined, windows will "bump" against 133 // other window edges as well as the edges of the screen 134 135 #define CONFIG_BUMP_EVERYWHERE True 136 137 // If CONFIG_PROD_SHAPE is True, all frame element shapes will be 138 // recalculated afresh every time their focus changes. This will 139 // probably slow things down hideously, but has been reported as 140 // necessary on some systems (possibly SunOS 4.x with OpenWindows). 141 142 #define CONFIG_PROD_SHAPE False 143 144 // If RESIZE_UPDATE is True, windows will opaque-resize "correctly"; 145 // if False, behaviour will be as in wm2 (stretching the background 146 // image only). 147 148 #define CONFIG_RESIZE_UPDATE True 149 150 // If USE_COMPOSITE is true, wmx will enable composite redirects for 151 // all windows if the Composite extension is present. This should 152 // make no difference at all to the appearance or behaviour of wmx, 153 // but it may make it substantially faster with modern video cards 154 // that optimise rendering more than old-fashioned window operations. 155 156 #define CONFIG_USE_COMPOSITE True 157 158 // If RAISELOWER_ON_CLICK is True, clicking on the title of the 159 // topmost window will lower instead of raising it (patch due to 160 // Kazushi (Jam) Marukawa) 161 162 #define CONFIG_RAISELOWER_ON_CLICK True 163 164 // If USE_WINDOW_GROUPS is True, then if an application marks a mapped 165 // window as a group leader, when iconified, moved between desktops, 166 // killed etc, the leader will take all the rest of its window group 167 // with it. Very few applications make any use of this -- indeed I 168 // haven't found any to test it on yet, so it probably doesn't work. 169 // This is different from the group stuff from Henri Naccache to be 170 // found further down this file 171 172 #define CONFIG_USE_WINDOW_GROUPS True 173 174 // If USE_SESSION_MANAGER is True, and you have an Xsmc session 175 // manager running, wmx will respond to session manager callbacks and 176 // notify the session manager of its restart command. 177 178 #define CONFIG_USE_SESSION_MANAGER True 179 180 // Specify the maximum length of an entry in the client menu or the command 181 // menu. Set this to zero if you want no limitation 182 183 #define MENU_ENTRY_MAXLENGTH 80 184 185 186 // ======================== 187 // Section II. Key bindings 188 // ======================== 189 190 // Allow keyboard control? 191 #define CONFIG_USE_KEYBOARD (DynamicConfig::config.useKeyboard()) 192 193 // This is the key for wm controls: e.g. Alt/Left and Alt/Right to 194 // flip channels, and Alt/Tab to switch windows. (On my 105-key 195 // PC keyboard, Meta_L corresponds to the left Windows key.) 196 197 #define CONFIG_ALT_KEY XK_Super_L 198 199 // And these define the rest of the keyboard controls, when the above 200 // modifier is pressed; they're keysyms as defined in <X11/keysym.h> 201 // and <X11/keysymdef.h> 202 203 #define CONFIG_FLIP_UP_KEY XK_Right 204 #define CONFIG_FLIP_DOWN_KEY XK_Left 205 #define CONFIG_HIDE_KEY XK_Return 206 #define CONFIG_STICKY_KEY XK_Pause 207 #define CONFIG_RAISE_KEY XK_Up 208 #define CONFIG_LOWER_KEY XK_Down 209 // Prior and Next should be the same as Page_Up and Page_Down in R6 210 #define CONFIG_FULLHEIGHT_KEY XK_Prior 211 #define CONFIG_NORMALHEIGHT_KEY XK_Next 212 #define CONFIG_FULLWIDTH_KEY XK_KP_Add 213 #define CONFIG_NORMALWIDTH_KEY XK_KP_Subtract 214 #define CONFIG_MAXIMISE_KEY XK_Home 215 #define CONFIG_UNMAXIMISE_KEY XK_End 216 #define CONFIG_SAME_KEY_MAX_UNMAX True 217 218 // With modifier, print a list of client data to stdout 219 #define CONFIG_DEBUG_KEY XK_Print 220 221 // The next two may clash badly with Emacs, if you use Alt as the 222 // modifier. The commented variants might work better for some. 223 #define CONFIG_CIRCULATE_KEY XK_Tab 224 //#define CONFIG_CIRCULATE_KEY XK_grave 225 //#define CONFIG_CIRCULATE_KEY XK_section 226 #define CONFIG_DESTROY_KEY XK_BackSpace 227 //#define CONFIG_DESTROY_KEY XK_Delete 228 //#define CONFIG_DESTROY_KEY XK_Insert 229 230 // If WANT_KEYBOARD_MENU is True, then the MENU_KEY, when pressed with 231 // the modifier, will call up a client menu with keyboard navigation 232 #define CONFIG_WANT_KEYBOARD_MENU True 233 #define CONFIG_CLIENT_MENU_KEY XK_Escape 234 #define CONFIG_COMMAND_MENU_KEY XK_Multi_key 235 #define CONFIG_EXIT_ON_KBD_MENU True 236 // these are for navigating on the menu; they don't require a modifier 237 #define CONFIG_MENU_UP_KEY XK_Up 238 #define CONFIG_MENU_DOWN_KEY XK_Down 239 #define CONFIG_MENU_SELECT_KEY XK_Return 240 #define CONFIG_MENU_CANCEL_KEY XK_Escape 241 242 // Useful for fortunate people with Sun Type-5 keyboards. These don't 243 // require the modifier to be pressed. 244 #define CONFIG_WANT_SUNKEYS False 245 #define CONFIG_WANT_SUNPOWERKEY True 246 #define CONFIG_QUICKRAISE_KEY XK_F15 247 #define CONFIG_QUICKHIDE_KEY XK_F17 248 #define CONFIG_QUICKHEIGHT_KEY XK_F13 249 #define CONFIG_QUICKCLOSE_KEY XK_F11 250 #define CONFIG_QUICKRAISE_ALSO_LOWERS True 251 #define CONFIG_SUNPOWER_EXEC "/usr/openwin/bin/sys-suspend" 252 #define CONFIG_SUNPOWER_OPTIONS "-x","-h",0 253 #define CONFIG_SUNPOWER_SHIFTOPTIONS "-x","-n",0 254 255 // Mouse Configuration 256 // Use this section to remap your mouse button actions. 257 // Button1 = LMB, Button2 = MMB, Button3 = RMB 258 // Button4 = WheelUp, Button5 = WheelDown 259 // To prevent one or more of these from being supported 260 // at all, define it to CONFIG_NO_BUTTON. 261 #define CONFIG_NO_BUTTON 999 262 #define CONFIG_CLIENTMENU_BUTTON Button1 263 #define CONFIG_COMMANDMENU_BUTTON Button3 264 #define CONFIG_CIRCULATE_BUTTON Button2 // switch window, when over frame 265 #define CONFIG_PREVCHANNEL_BUTTON Button5 // flip channel, when over frame 266 #define CONFIG_NEXTCHANNEL_BUTTON Button4 // flip channel, when over frame 267 268 269 // ============================== 270 // Section III. Colours and fonts 271 // ============================== 272 273 // Define CONFIG_USE_XFT to enable Xft support for drawing fonts. 274 // Otherwise plain X calls will be used. The rest of the font 275 // configuration depends on whether or not this is set. 276 277 //#define CONFIG_USE_XFT 1 278 279 #ifdef CONFIG_USE_XFT 280 281 // Fonts used all over the place. FRAME_FONT is a comma-separated 282 // list of font names to use for the frame text (the first available 283 // font in the list is used). MENU_FONT is likewise for menu text. 284 // The SIZE values are in pixels. 285 286 //!!! no proper way to handle italic/bold yet 287 288 #define CONFIG_FRAME_FONT "Bitstream Vera Sans,Lucida Sans Unicode" 289 #define CONFIG_FRAME_FONT_SIZE 12 290 291 #define CONFIG_MENU_FONT "Bitstream Vera Sans,Lucida Sans Unicode" 292 #define CONFIG_MENU_FONT_SIZE 12 293 294 #else 295 296 // Fonts used all over the place. NICE_FONT is for the frames, and 297 // NICE_MENU_FONT for the menus. NASTY_FONT is what you'll get if it 298 // can't find one of the NICE ones. These are font lists, rather than 299 // single fonts 300 301 #define CONFIG_NICE_FONT "-misc-montserrat alternates-medium-r-normal--0-0-0-0-p-0-iso8859-1,-*-*-medium-r-*-*-14-*-75-75-*-*-*-*" 302 #define CONFIG_NICE_MENU_FONT "-*-lucida-medium-r-*-*-14-*-75-75-*-*-*-*,-*-*-medium-r-*-*-14-*-75-75-*-*-*-*" 303 #define CONFIG_NASTY_FONT "fixed,-*-*-*-*-*-*-14-*-75-75-*-*-*-*" 304 305 #endif 306 307 // CONFIG_TAB_MARGIN defines the size of the gap on the left and right of the 308 // text in the tab. 309 310 #define CONFIG_TAB_MARGIN (DynamicConfig::config.tabMargin()) 311 312 313 // If USE_PLAIN_X_CURSORS is True, wmx will use cursors from the 314 // standard X cursor font; otherwise it will install its own. You may 315 // wish to set this if your X client and server are on different 316 // endian machines, or if you've aliased the cursor font to something 317 // else you like better, or if you just prefer the plain X cursors 318 319 #define CONFIG_USE_PLAIN_X_CURSORS True 320 321 // Colours for window decorations. The BORDERS one is for the 322 // one-pixel border around the edge of each piece of decoration, not 323 // for the whole decoration 324 325 #define CONFIG_TAB_FOREGROUND (DynamicConfig::config.tabForeground()) 326 #define CONFIG_TAB_BACKGROUND (DynamicConfig::config.tabBackground()) 327 #define CONFIG_FRAME_BACKGROUND (DynamicConfig::config.frameBackground()) 328 #define CONFIG_BUTTON_BACKGROUND (DynamicConfig::config.frameBackground()) 329 #define CONFIG_BORDERS "black" 330 #define CONFIG_CHANNEL_NUMBER "green" 331 #define CONFIG_CLOCK_NUMBER "gray90" 332 333 #define CONFIG_MENU_FOREGROUND (DynamicConfig::config.tabForeground()) 334 #define CONFIG_MENU_BACKGROUND (DynamicConfig::config.tabBackground()) 335 #define CONFIG_MENU_BORDERS "black" 336 337 // Pixel width for the bit of frame to the left of the window and the 338 // sum of the two bits at the top 339 // Note that this value cannot be lower than 6 340 341 #define CONFIG_FRAME_THICKNESS 6 342 343 344 // ======================== 345 // Section IV. Flashy stuff 346 // ======================== 347 348 // If USE_PIXMAPS is True the frames will be decorated with the pixmap 349 // in ./background.xpm; if USE_PIXMAP_MENUS is also True, the menus 350 // will be too. The latter screws up in palette-based visuals, but 351 // should be okay in true-colour. 352 353 #define CONFIG_USE_PIXMAPS True 354 #define CONFIG_USE_PIXMAP_MENUS True 355 356 // Set CHANNEL_SURF for multi-channel switching; CHANNEL_CLICK_SIZE is 357 // how close you have to middle-button-click to the top-right corner 358 // of the root window before the channel change happens. Set 359 // USE_CHANNEL_KEYS if you want Alt-F1, Alt-F2 etc for quick channel 360 // changes, provided USE_KEYBOARD is also True. Set USE_CHANNEL_MENU 361 // if you want to change channels via a keyboard-controlled menu 362 // instead of linearly up and down one at a time like TV. 363 364 #define CONFIG_CHANNEL_SURF True 365 #define CONFIG_CHANNEL_CLICK_SIZE 120 366 #define CONFIG_CHANNEL_NUMBER_SIZE 5 367 #define CONFIG_USE_CHANNEL_KEYS True 368 #define CONFIG_USE_CHANNEL_MENU False 369 370 // FLIP_DELAY is the length of time the big green number stays in the 371 // top-right when flipping channels, before the windows reappear. 372 // QUICK_FLIP_DELAY is the equivalent figure used when flipping with 373 // the Alt-Fn keys or mouse wheel. Milliseconds. 374 375 #define CONFIG_FLIP_DELAY 1000 376 #define CONFIG_QUICK_FLIP_DELAY 500 377 378 // Set MAD_FEEDBACK for skeletal representations of windows when 379 // flicking through the client menu and changing channels. The DELAY 380 // is how long skeletal feedback has to persist before wmx decides to 381 // post the entire window contents instead; if it's negative, the 382 // contents will never be posted. Experiment with these -- if your 383 // machine is fast and you're really hyper, you might even like a 384 // delay of 0ms. 385 386 #define CONFIG_MAD_FEEDBACK (DynamicConfig::config.useFeedback()) 387 #define CONFIG_FEEDBACK_DELAY 0 388 389 // Position of the geometry window: 390 // X < 0 left, X > 0 right, X = 0 center 391 // Y < 0 top, Y > 0 bottom, Y = 0 center 392 #define CONFIG_GEOMETRY_X_POS 10000 393 #define CONFIG_GEOMETRY_Y_POS 10000 394 395 // Groups are fun. you can bind a bunch of windows to a number key 396 // and when you press CONFIG_ALT_KEY_MASK and the number key 397 // all the windows of that group are raised. 398 399 // You bind a window to a group by pressing the 400 // CONFIG_ALT_KEY_MASK + CONFIG_GROUP_ADD + a number key 401 402 // if you press CONFIG_ALT_KEY_MASK + CONFIG_GROUP_REMOVE_ALL 403 // + a number key that group is cleared of all windows. 404 405 #define CONFIG_GROUPS True 406 #define CONFIG_GROUP_ADD ControlMask 407 #define CONFIG_GROUP_REMOVE_ALL ShiftMask 408 409 // Set CLOCK if you want wmx to display a clock permanently in the 410 // background at top-left of screen 0. Use CONFIG_CLOCK_NUMBER 411 // to control the colour of the clock digits. 412 413 #define CONFIG_CLOCK False 414 415 // This lets you choose whether to keep the regular wmx 416 // mouse button behaviour, or go w/ the GNOME-described one. 417 // If this is True, the left mouse button (button1) lets you 418 // select 1 or more gmc 'icons' and drag them around etc, 419 // the right mouse button (button3) pops up the GNOME 420 // command menu, and the middle mouse button (button2) 421 // acts like the left mouse normally does (list of windows) 422 423 #define CONFIG_GNOME_BUTTON_COMPLIANCE False 424 425 #endif 426