Some more work on the how to hack documentation
This commit is contained in:
parent
b4fcd3f81f
commit
44803b0026
@ -2,7 +2,7 @@
|
|||||||
all: hacking-howto.html debugging.html
|
all: hacking-howto.html debugging.html
|
||||||
|
|
||||||
hacking-howto.html: hacking-howto
|
hacking-howto.html: hacking-howto
|
||||||
asciidoc -n $<
|
asciidoc -a toc -n $<
|
||||||
|
|
||||||
debugging.html: debugging
|
debugging.html: debugging
|
||||||
asciidoc -n $<
|
asciidoc -n $<
|
||||||
|
BIN
docs/bigpicture.png
Normal file
BIN
docs/bigpicture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.0 KiB |
BIN
docs/bigpicture.xcf
Normal file
BIN
docs/bigpicture.xcf
Normal file
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
Hacking i3: How To
|
Hacking i3: How To
|
||||||
==================
|
==================
|
||||||
Michael Stapelberg <michael+i3@stapelberg.de>
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
||||||
March 2009
|
May 2009
|
||||||
|
|
||||||
This document is intended to be the first thing you read before looking and/or touching
|
This document is intended to be the first thing you read before looking and/or touching
|
||||||
i3’s source code. It should contain all important information to help you understand
|
i3’s source code. It should contain all important information to help you understand
|
||||||
@ -103,7 +103,9 @@ include/data.h::
|
|||||||
Contains data definitions used by nearly all files. You really need to read this first.
|
Contains data definitions used by nearly all files. You really need to read this first.
|
||||||
|
|
||||||
include/*.h::
|
include/*.h::
|
||||||
Contains forward definitions for all public functions.
|
Contains forward definitions for all public functions, aswell as doxygen-compatible
|
||||||
|
comments (so if you want to get a bit more of the big picture, either browse all
|
||||||
|
header files or use doxygen if you prefer that).
|
||||||
|
|
||||||
src/commands.c::
|
src/commands.c::
|
||||||
Parsing commands
|
Parsing commands
|
||||||
@ -140,19 +142,27 @@ src/xinerama.c::
|
|||||||
See include/data.h for documented data structures. The most important ones are explained
|
See include/data.h for documented data structures. The most important ones are explained
|
||||||
right here.
|
right here.
|
||||||
|
|
||||||
TODO: We need a slick graphic here
|
image:bigpicture.png[The Big Picture]
|
||||||
|
|
||||||
|
So, the hierarchy is:
|
||||||
|
|
||||||
|
. *Virtual screens* (Screen 0 in this example)
|
||||||
|
. *Workspaces* (Workspace 1 in this example)
|
||||||
|
. *Table* (There can only be one table per Workspace)
|
||||||
|
. *Container* (left and right in this example)
|
||||||
|
. *Client* (The two clients in the left container)
|
||||||
|
|
||||||
=== Virtual screens
|
=== Virtual screens
|
||||||
|
|
||||||
A virtual screen (type `i3Screen`) is generated from the connected screens obtained
|
A virtual screen (type `i3Screen`) is generated from the connected screens obtained
|
||||||
through Xinerama. The difference to the raw Xinerama monitors as seen when using xrandr(1)
|
through Xinerama. The difference to the raw Xinerama monitors as seen when using +xrandr(1)+
|
||||||
is that it falls back to the lowest common resolution of the logical screens.
|
is that it falls back to the lowest common resolution of the logical screens.
|
||||||
|
|
||||||
For example, if your notebook has 1280x800 and you connect a video projector with
|
For example, if your notebook has 1280x800 and you connect a video projector with
|
||||||
1024x768, set up in clone mode (xrandr \--output VGA \--mode 1024x768 \--same-as LVDS),
|
1024x768, set up in clone mode (+xrandr \--output VGA \--mode 1024x768 \--same-as LVDS+),
|
||||||
i3 will have one virtual screen.
|
i3 will have one virtual screen.
|
||||||
|
|
||||||
However, if you configure it using xrandr \--output VGA \--mode 1024x768 \--right-of LVDS,
|
However, if you configure it using +xrandr \--output VGA \--mode 1024x768 \--right-of LVDS+,
|
||||||
i3 will generate two virtual screens. For each virtual screen, a new workspace will be
|
i3 will generate two virtual screens. For each virtual screen, a new workspace will be
|
||||||
assigned. New workspaces are created on the screen you are currently on.
|
assigned. New workspaces are created on the screen you are currently on.
|
||||||
|
|
||||||
@ -291,7 +301,15 @@ is re-rendered.
|
|||||||
|
|
||||||
== Size hints
|
== Size hints
|
||||||
|
|
||||||
TODO
|
Size hints specify the minimum/maximum size for a given window aswell as its aspect ratio.
|
||||||
|
At the moment, as i3 does not have a floating mode yet, only the aspect ratio is parsed.
|
||||||
|
This is important for clients like mplayer, who only set the aspect ratio and resize their
|
||||||
|
window to be as small as possible (but only with some video outputs, for example in Xv,
|
||||||
|
while when using x11, mplayer does the necessary centering for itself).
|
||||||
|
|
||||||
|
So, when an aspect ratio was specified, i3 adjusts the height of the window until the
|
||||||
|
size maintains the correct aspect ratio. For the code to do this, see src/layout.c,
|
||||||
|
function resize_client().
|
||||||
|
|
||||||
== Rendering (src/layout.c, render_layout() and render_container())
|
== Rendering (src/layout.c, render_layout() and render_container())
|
||||||
|
|
||||||
@ -373,3 +391,30 @@ direction to move a window respectively or snap.
|
|||||||
* Forgetting to call `xcb_flush(conn);` after sending a request. This usually leads to
|
* Forgetting to call `xcb_flush(conn);` after sending a request. This usually leads to
|
||||||
code which looks like it works fine but which does not work under certain conditions.
|
code which looks like it works fine but which does not work under certain conditions.
|
||||||
|
|
||||||
|
== Using git / sending patches
|
||||||
|
|
||||||
|
For a short introduction into using git, see TODO.
|
||||||
|
|
||||||
|
When you want to send a patch because you fixed a bug or implemented a cool feature (please
|
||||||
|
talk to us before working on features to see whether they are maybe already implemented, not
|
||||||
|
possible because of some reason or don’t fit into the concept), please use git to create
|
||||||
|
a patchfile.
|
||||||
|
|
||||||
|
First of all, update your working copy to the latest version of the master branch:
|
||||||
|
|
||||||
|
--------
|
||||||
|
git pull
|
||||||
|
--------
|
||||||
|
|
||||||
|
Afterwards, make the necessary changes for your bugfix/feature. Then, review the changes
|
||||||
|
using +git diff+ (you might want to enable colors in the diff using +git config diff.color auto+).
|
||||||
|
When you are definitely done, use +git commit -a+ to commit all changes you’ve made.
|
||||||
|
|
||||||
|
Then, use the following command to generate a patchfile which we can directly apply to
|
||||||
|
the branch, preserving your commit message and name:
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
git format-patch origin
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Just send us the generated file via mail.
|
||||||
|
Loading…
Reference in New Issue
Block a user