Go to file
Pierre Habouzit 5a07ee4946 Put keybindings in binary searchable arrays.
This patch sorts keybindings in arrays by keycode or keysym to speed up look
up using binary searches. This is a preliminary work to enable more powerful
keybindings stuff, where keybindings can be cascaded or why not, attached to
specific clients.

Interstingly enough, this patch saves 100ko of initial memory (Heap) usage here.

The underlying idea is that we should be able to define keybindings_t as
trees of keybindings_t which would then define key sequences.

The OO approach kind of make sense in fact, since you create a base
keybinding (e.g. reacting on Mod4-w) and then you will probably (with
appropriate apis) be able to populate new submaps from that point more or
less dynamically.

And if you have two keybindings on Mod4-w, then adding them will replace the
previous one. This means that you can fake per-client bindings with e.g.:

  k_default = keybindings.new({"Mod4"}, "w", something);
  k_mplayer = keybindings.new({"Mod4"}, "w", something_else);
  k_default:add()

and in your focus hook:

  if /* code for testing if it's mplayer */ then
      k_mplayer:add()
  else
      k_default:add()
  end

This would not work before, it does now.

It will take way more sense with submaps of course.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
2008-06-25 11:04:56 +02:00
build-utils build: implement make dist using git-archive 2008-06-24 08:58:04 +02:00
common Calling destructor on splice is wrong, take doesn't want it e.g. 2008-06-25 11:04:56 +02:00
icons Added magnifier icons. 2008-06-14 00:03:04 +02:00
layouts area_t: make it smaller, use arrays instead of lists. 2008-06-22 22:09:48 +02:00
lib awful: rename menu to prompt 2008-06-25 09:07:57 +02:00
widgets systray: set orientation 2008-06-24 19:56:10 +02:00
.gitignore Use gperf to tokenize some strings. 2008-06-23 07:41:22 +02:00
AUTHORS add Michael as author 2008-06-22 19:38:55 +02:00
BUGS BUG's page 2008-04-18 19:33:58 +02:00
CMakeLists.txt cmake: cleanup paths variables/fix AWESOME_CONF_PATH 2008-06-25 04:00:19 +02:00
LICENSE chance license to GPLv2 2007-09-12 14:29:51 +02:00
README "recent version" has no mean 2008-06-24 22:30:46 +02:00
STYLE Fix STYLE file to reflect current style [CORRECTIVE] 2008-03-24 07:49:33 +01:00
awesome-client.1.txt Revert "Replace tags by workspaces" 2008-06-09 21:56:03 +02:00
awesome-client.c comments fixing 2008-06-20 08:38:00 +02:00
awesome-version-internal.h.in cmake: consolidate version strings 2008-06-22 22:13:06 +02:00
awesome.1.txt [manpage] Update 2008-06-11 09:56:19 +02:00
awesome.c systray: set handler before ewmh/systray init 2008-06-24 19:55:14 +02:00
awesome.doxygen.in cmake: configure awesome.doxygen 2008-06-19 22:28:47 +02:00
awesomeConfig.cmake cmake: cleanup paths variables/fix AWESOME_CONF_PATH 2008-06-25 04:00:19 +02:00
awesomerc.5.txt awesomerc.5.txt don't include the api documentation 2008-06-23 18:43:05 +02:00
awesomerc.lua.in awful: rename menu to prompt 2008-06-25 09:07:57 +02:00
client.c systray: set orientation 2008-06-24 19:56:10 +02:00
client.h client: export client_geometry_hints 2008-06-18 18:48:38 +02:00
cnode.c comments fixing 2008-06-20 08:38:00 +02:00
cnode.h [focus] Split client_node functions out 2008-05-25 18:12:27 +02:00
config.h.in cmake: consolidate version strings 2008-06-22 22:13:06 +02:00
dbus.c Plug dbus in the event loop. 2008-06-16 23:51:07 +02:00
dbus.h Plug dbus in the event loop. 2008-06-16 23:51:07 +02:00
event.c Put keybindings in binary searchable arrays. 2008-06-25 11:04:56 +02:00
event.h xshape: remove, nothing prove it's really useful 2008-06-17 15:06:05 +02:00
ewmh.c Replace tag_t lists with arrays. 2008-06-23 17:37:19 +02:00
ewmh.h ewmh: s/NetWMIcon/netwm_icon_t/ 2008-06-18 09:29:57 +02:00
focus.c Revert "Replace tags by workspaces" 2008-06-09 21:56:03 +02:00
focus.h Revert "Replace tags by workspaces" 2008-06-09 21:56:03 +02:00
keybinding.c Put keybindings in binary searchable arrays. 2008-06-25 11:04:56 +02:00
keybinding.h Put keybindings in binary searchable arrays. 2008-06-25 11:04:56 +02:00
keygrabber.c comments fixing 2008-06-20 08:38:00 +02:00
keygrabber.h [keygrabber] Fix key mapping 2008-06-10 22:37:45 +02:00
layout.c layout: remove useless check 2008-06-24 14:40:38 +02:00
layout.h Revert "Replace tags by workspaces" 2008-06-09 21:56:03 +02:00
lua.c lua: remap on restart 2008-06-24 17:39:06 +02:00
lua.h use more tokenizer, with len 2008-06-23 14:01:33 +02:00
mouse.c mouse: move/resize return if grabbing the pointer fails. 2008-06-24 08:58:04 +02:00
mouse.h [client] Rework raise and mouse stuff 2008-05-26 18:08:29 +02:00
placement.c placement: fix smart 2008-06-23 17:30:35 +02:00
placement.h placement: rename FloatingPlacement to floating_placement_t 2008-06-15 10:55:07 +02:00
screen.c Replace tag_t lists with arrays. 2008-06-23 17:37:19 +02:00
screen.h Revert "Replace tags by workspaces" 2008-06-09 21:56:03 +02:00
stack.c ewmh: add support for _NET_CLIENT_LIST_STACKING 2008-06-17 21:47:57 +02:00
stack.h [client] Add proper stacking support 2008-05-25 19:32:30 +02:00
statusbar.c Fix draw_align_fromstr calls. 2008-06-24 22:40:34 +02:00
statusbar.h lua: userdata_new is now macro 2008-06-18 18:31:35 +02:00
structs.h Put keybindings in binary searchable arrays. 2008-06-25 11:04:56 +02:00
systray.c systray: fix stack and send event 2008-06-24 19:54:54 +02:00
systray.h systray: attach systray to external window, not statusbar 2008-06-15 10:33:10 +02:00
tag.c Avoid lists of tag/client pairs, use an array per tag. 2008-06-24 14:30:13 +02:00
tag.h Avoid lists of tag/client pairs, use an array per tag. 2008-06-24 14:30:13 +02:00
titlebar.c Fix draw_align_fromstr calls. 2008-06-24 22:40:34 +02:00
titlebar.h lua: userdata_new is now macro 2008-06-18 18:31:35 +02:00
widget.c Fix draw_align_fromstr calls. 2008-06-24 22:40:34 +02:00
widget.h lua: userdata_new is now macro 2008-06-18 18:31:35 +02:00
window.c Replace xcb_aux_get_screen() by a safer function 2008-06-17 17:14:00 +02:00
window.h xshape: remove, nothing prove it's really useful 2008-06-17 15:06:05 +02:00

README

awesome
=======
awesome is an extremely fast, small, and dynamic window manager for X.

Requirements
------------
In order to build awesome itself, you need header files and libs of:
  - Xlib, xcb and xcb-util.
  - Lua 5.1
  - cairo
  - pango and pangocairo
  - libev
  - glib
  - GdkPixBuf or Imlib2 (use -DWITH_IMLIB2=1 with cmake)
  - dbus (optional, use -DWITH_DBUS=0 with cmake to disable)
  - gperf

In order to build the awesome man pages and documentation,
you need these tools:
  - asciidoc
  - xmlto
  - docbook XSL stylesheets
  - luadoc

In order to build the source code reference, you need these tools:
  - doxygen
  - graphviz

Building and Installation
-------------------------
After extracting the dist tarball, run:

  cmake .
  make
  make install # might need root permissions

The source code reference can be built with "make doc".

Running awesome
-----------
Add the following line to your .xinitrc to start awesome using startx
or to .xsession to start awesome using gdm/kdm/xdm...:

    exec awesome

In order to connect awesome to a specific display, make sure that
the DISPLAY environment variable is set correctly, e.g.:

    DISPLAY=foo.bar:1 exec awesome

(This will start awesome on display :1 of the host foo.bar.)

Configuration
-------------
The configuration of awesome is done by creating a ~/.awesomerc.lua file.
An example is provided in the sources.