/* * config.h - configuration management header * * Copyright © 2007 Julien Danjou * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ #ifndef AWESOME_CONFIG_H #define AWESOME_CONFIG_H #include #include #include /** Bar possible position */ enum { BarTop, BarBot, BarLeft, BarRight, BarOff }; enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ typedef struct Rule Rule; struct Rule { char *prop; char *tags; int screen; Bool isfloating; regex_t *propregex; regex_t *tagregex; Rule *next; }; typedef struct awesome_config awesome_config; typedef struct { char *symbol; void (*arrange) (awesome_config *, int); } Layout; typedef struct Key Key; struct Key { unsigned long mod; KeySym keysym; void (*func) (awesome_config *, int, char *); char *arg; Key *next; }; typedef struct Button Button; struct Button { unsigned long mod; unsigned int button; void (*func) (awesome_config *, int, char *); char *arg; Button *next; }; /** Status bar */ typedef struct { /** Bar width */ int width; /** Bar height */ int height; /** Layout txt width */ int txtlayoutwidth; /** Default position */ int dposition; /** Bar position */ int position; /** Window */ Window window; /** Screen */ int screen; } Statusbar; typedef struct Client Client; struct Client { /** Client name */ char name[256]; /** Window geometry */ int x, y, w, h; /** Real window geometry for floating */ int rx, ry, rw, rh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; int minax, maxax, minay, maxay; long flags; int border, oldborder; /** Store previous floating state before maximizing */ Bool wasfloating; /** True if the window is floating */ Bool isfloating; /** True if the window is fixed */ Bool isfixed; /** True if the window is maximized */ Bool ismax; /** Tags for the client */ Bool *tags; /** Next client */ Client *next; /** Previous client */ Client *prev; /** Window of the client */ Window win; /** Client display */ Display *display; /** Client logical screen */ int screen; /** Client physical screen */ int phys_screen; }; /** Tag type */ typedef struct { /** Tag name */ char *name; /** True if selected */ Bool selected; /** True if was selected before selecting others tags */ Bool was_selected; /** Current tag layout */ Layout *layout; /** Selected client on this tag */ Client *client_sel; /** Master width factor */ double mwfact; /** Number of master windows */ int nmaster; /** Number of columns in tile layout */ int ncol; } Tag; /** Padding type */ typedef struct { /** Padding at top */ int top; /** Padding at bottom */ int bottom; /** Padding at left */ int left; /** Padding at right */ int right; } Padding; typedef struct { /** Text displayed in bar */ char statustext[256]; /** Number of pixels to snap windows */ int snap; /** Border size */ int borderpx; /** Transparency of unfocused clients */ int opacity_unfocused; /** Focus move pointer */ Bool focus_move_pointer; /** Allow floats to be lowered on focus change */ Bool allow_lower_floats; /** Respect resize hints */ Bool resize_hints; /** Normal colors */ XColor colors_normal[ColLast]; /** Selected colors */ XColor colors_selected[ColLast]; /** Tag list */ Tag *tags; /** Number of tags in **tags */ int ntags; /** Layout list */ Layout *layouts; int nlayouts; /** Status bar */ Statusbar statusbar; /** Padding */ Padding padding; /** Font */ XftFont *font; } VirtScreen; /** Main configuration structure */ struct awesome_config { /** Display ref */ Display *display; /** Logical screens */ VirtScreen *screens; /** Rules list */ Rule *rules; /** Keys bindings list */ Key *keys; /** Mouse bindings list */ struct { Button *tag; Button *title; Button *layout; Button *root; Button *client; } buttons; /** Numlock mask */ unsigned int numlockmask; /** Check for XShape extension */ Bool have_shape; /** Check for XRandR extension */ Bool have_randr; /** Cursors */ Cursor cursor[CurLast]; /** Clients list */ Client *clients; /** Path to config file */ char *configpath; }; #define AWESOME_DEFAULT_CONFIG \ "screen 0 \ { \ tags \ { \ tag one { } \ tag two { } \ tag three { } \ tag four { } \ tag five { } \ tag six { } \ tag seven { } \ tag eight { } \ tag nine { } \ } \ layouts \ { \ layout tile { symbol = \"[]=\" } \ layout tileleft { symbol = \"=[]\" } \ layout max { symbol = \"[ ]\" } \ layout floating { symbol = \"><>\" } \ } \ } \ \ mouse \ { \ tag \ { \ button = \"1\" \ command = \"tag_view\" \ } \ tag \ { \ button = \"1\" \ modkey = {\"Mod4\"} \ command = \"client_tag\" \ } \ tag \ { \ button = \"3\" \ command = \"tag_toggleview\" \ } \ tag \ { \ button = \"3\" \ modkey = {\"Mod4\"} \ command = \"client_toggletag\" \ } \ tag \ { \ button = \"4\" \ command = \"tag_viewnext\" \ } \ tag \ { \ button = \"5\" \ command = \"tag_viewprev\" \ } \ layout \ { \ button = \"1\" \ command = \"tag_setlayout\" \ arg = \"+1\" \ } \ layout \ { \ button = \"4\" \ command = \"tag_setlayout\" \ arg = \"+1\" \ } \ layout \ { \ button = \"3\" \ command = \"tag_setlayout\" \ arg = \"-1\" \ } \ layout \ { \ button = \"5\" \ command = \"tag_setlayout\" \ arg = \"-1\" \ } \ root \ { \ button = \"3\" \ command = \"spawn\" \ arg = \"exec xterm\" \ } \ root \ { \ button = \"4\" \ command = \"tag_viewnext\" \ } \ root \ { \ button = \"5\" \ command = \"tag_viewprev\" \ } \ client \ { \ modkey = {\"Mod4\"} \ button = \"1\" \ command = \"client_movemouse\" \ } \ client \ { \ modkey = {\"Mod4\"} \ button = \"2\" \ command = \"client_zoom\" \ } \ client \ { \ modkey = {\"Mod4\"} \ button = \"3\" \ command = \"client_resizemouse\" \ } \ } \ \ keys \ { \ key \ { \ modkey = {\"Mod4\"} \ key = \"Return\" \ command = \"spawn\" \ arg = \"exec xterm\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"space\" \ command = \"tag_setlayout\" \ arg = \"+1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"space\" \ command = \"tag_setlayout\" \ arg = \"-1\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"b\" \ command = \"togglebar\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"j\" \ command = \"client_focusnext\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"k\" \ command = \"client_focusprev\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"j\" \ command = \"client_swapnext\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"k\" \ command = \"client_swapprev\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"j\" \ command = \"screen_focusnext\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"k\" \ command = \"screen_focusprev\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"h\" \ command = \"tag_setmwfact\" \ arg = \"-0.05\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"l\" \ command = \"tag_setmwfact\" \ arg = \"+0.05\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"h\" \ command = \"tag_setnmaster\" \ arg = \"+1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"l\" \ command = \"tag_setnmaster\" \ arg = \"-1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"h\" \ command = \"tag_setncol\" \ arg = \"+1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"l\" \ command = \"tag_setncol\" \ arg = \"-1\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"Escape\" \ command = \"tag_viewprev_selected\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"Left\" \ command = \"tag_viewprev\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"Right\" \ command = \"tag_viewnext\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"m\" \ command = \"client_togglemax\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"Return\" \ command = \"client_zoom\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"space\" \ command = \"client_togglefloating\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"c\" \ command = \"client_kill\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"q\" \ command = \"quit\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"r\" \ command = \"reloadconfig\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"0\" \ command = \"tag_view\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"1\" \ command = \"tag_view\" \ arg = \"1\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"2\" \ command = \"tag_view\" \ arg = \"2\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"3\" \ command = \"tag_view\" \ arg = \"3\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"4\" \ command = \"tag_view\" \ arg = \"4\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"5\" \ command = \"tag_view\" \ arg = \"5\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"6\" \ command = \"tag_view\" \ arg = \"6\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"7\" \ command = \"tag_view\" \ arg = \"7\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"8\" \ command = \"tag_view\" \ arg = \"8\" \ } \ key \ { \ modkey = {\"Mod4\"} \ key = \"9\" \ command = \"tag_view\" \ arg = \"9\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"0\" \ command = \"tag_toggleview\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"1\" \ command = \"tag_toggleview\" \ arg = \"1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"2\" \ command = \"tag_toggleview\" \ arg = \"2\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"3\" \ command = \"tag_toggleview\" \ arg = \"3\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"4\" \ command = \"tag_toggleview\" \ arg = \"4\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"5\" \ command = \"tag_toggleview\" \ arg = \"5\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"6\" \ command = \"tag_toggleview\" \ arg = \"6\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"7\" \ command = \"tag_toggleview\" \ arg = \"7\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"8\" \ command = \"tag_toggleview\" \ arg = \"8\" \ } \ key \ { \ modkey = {\"Mod4\", \"Control\"} \ key = \"9\" \ command = \"tag_toggleview\" \ arg = \"9\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"0\" \ command = \"client_tag\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"1\" \ command = \"client_tag\" \ arg = \"1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"2\" \ command = \"client_tag\" \ arg = \"2\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"3\" \ command = \"client_tag\" \ arg = \"3\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"4\" \ command = \"client_tag\" \ arg = \"4\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"5\" \ command = \"client_tag\" \ arg = \"5\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"6\" \ command = \"client_tag\" \ arg = \"6\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"7\" \ command = \"client_tag\" \ arg = \"7\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"8\" \ command = \"client_tag\" \ arg = \"8\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\"} \ key = \"9\" \ command = \"client_tag\" \ arg = \"9\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"0\" \ command = \"client_toggletag\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"1\" \ command = \"client_toggletag\" \ arg = \"1\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"2\" \ command = \"client_toggletag\" \ arg = \"2\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"3\" \ command = \"client_toggletag\" \ arg = \"3\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"4\" \ command = \"client_toggletag\" \ arg = \"4\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"5\" \ command = \"client_toggletag\" \ arg = \"5\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"6\" \ command = \"client_toggletag\" \ arg = \"6\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"7\" \ command = \"client_toggletag\" \ arg = \"7\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"8\" \ command = \"client_toggletag\" \ arg = \"8\" \ } \ key \ { \ modkey = {\"Mod4\", \"Shift\", \"Control\"} \ key = \"9\" \ command = \"client_toggletag\" \ arg = \"9\" \ } \ }" void parse_config(const char *, awesome_config *); void uicb_reloadconfig(awesome_config *, const char *); #endif // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99