enlightenment/doc/manual.raw

473 lines
16 KiB
Plaintext

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
<!ENTITY e17 "<productname>Enlightenment 0.17</productname>">
]>
<book id="e17-manual">
<bookinfo>
<title>The Enlightenment 0.17 Manual</title>
<authorgroup>
<author>
<firstname>Christian</firstname>
<surname>Kreibich</surname>
<affiliation>
<address>
<email>cK@whoop.org</email>
</address>
</affiliation>
</author>
</authorgroup>
<copyright>
<year>2001</year>
<holder>Christian Kreibich</holder>
</copyright>
<legalnotice>
<para>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
</para>
<para>
The above copyright notice and this permission notice shall be included in
all copies of the Software and its documentation and acknowledgment shall be
given in the documentation and software packages that this Software was
used.
</para>
<para>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</para>
</legalnotice>
<releaseinfo>
This is document is nowhere near being finished. Be patient.
</releaseinfo>
</bookinfo>
<toc></toc>
<chapter id="introduction">
<title>Introduction</title>
<para>
This document explains the &e17; release, for both users and
developers.
</para>
</chapter>
<chapter id="using">
<title>Using &e17;</title>
<para>
Here's how you use &e17;.
</para>
<section id="features">
<title id="features.title">Feature List</title>
<para>
At the moment, &e17; has not been released. The current feature list includes:
<orderedlist>
<listitem>
<para>A fully functional and mostly ICCCM-compliant windowmanager.</para>
</listitem>
<listitem>
<para>Multiple desktops (in the version 0.16 sense, so no large,
virtual desktop area yet).</para>
</listitem>
<listitem>
<para>Shading/unshading of windows.</para>
</listitem>
<listitem>
<para>Ability to browse files in your filesystem through view windows,
with recognition of the file types and appropriate icons.</para>
</listitem>
<listitem>
<para>Support for icon bars in each view window. These are
collections of icons for commonly needed applications or documents
in a directory. For example, in a directory with lots of images
you will want to have image viewers ready, in a directory with
MP3 files you'll want music players etc. The icon bars keep
those applications where you need them.</para>
</listitem>
</orderedlist>
This feature list should not imply that &e17; is ready for public use
yet. Many more features are in development, but their configuration
is currently hard-coded. If you want a fancy windowmanager with
full configurability, you best stick to the currently stable 0.16.5
release.
</para>
<para>
Please do not come to the mailing lists and ask for release dates etc.
&e17; will be released when it has matured to a stable system that is
usable also for novices. &e17; will <emphasis>not</emphasis> be as
rich in features as the 0.16 series -- we intend to produce a simple,
stable desktop shell for that release. Funky features will be considered
for the 0.18 release.
</para>
</section>
<section id="wm">
<title id="wm.title">The Window Manager</title>
<para>
</para>
</section>
<section id="fm">
<title id="fm.title">The File Manager</title>
<para>
</para>
</section>
<section id="concepts">
<title id="concepts.title">Themeing</title>
<section id="overview">
<title id="overview.title">Overview</title>
<para>
</para>
</section>
<section id="system">
<title id="system.title">System Settings</title>
<para>
</para>
</section>
<section id="user">
<title id="user.title">User Settings</title>
<para>
</para>
</section>
</section>
</chapter>
<chapter id="inside">
<title>Inside &e17;</title>
<para>
This chapter explains the inner workings of &e17;.
</para>
<section id="build">
<title id="build.title">Building &e17;</title>
<para>
This chapter explains how to build &e17; manually. The Enlightenment
Project is hosted by <ulink url="http://www.sourceforge.net">Sourceforge</ulink>,
the project website is therefore
<ulink url="http://www.sourceforge.net/projects/enlightenment">http://www.sf.net/projects/enlightenment</ulink>.
Since you're reading this document, your probably know this already.
CVS is used for version control, refer to the Sourceforge documentation
for details about using CVS.
</para>
<para>
<caution>
<title>Make sure you know what you're doing!</title>
<para>
Building e17 from CVS code is not trivial. Expect problems.
You're using development code, so do not expect the software
to work. Things can and with all likelihood will break.
Be sure you know how to handle the tools you need for the
build.
</para>
<para>
Experience from the mailing lists shows that way too many
people try using CVS without the proper skills. We will try
to give help, but by explaining how to build &e17; we lose
time we'd otherwise spend coding, so try to solve issues
yourselves first.
</para>
</caution>
</para>
<para>
An incomplete tree of the current CVS contents is shown below.
For details about the modules, please refer to the
<link linkend="modules" endterm="modules.title">Modules</link>
section below or the
<ulink url="http://www.enlightenment.org/pages/components.html">webpage</ulink>.
<programlisting>
e17
| \
| apps
| |___ e * Enlightenment 0.17, the main program.
| |
| |___ ebindings A keybingings and menu contents editor.
| |
| |___ ebony A background editor.
| |
| |___ efsd * The Enlightenment File System Daemon.
| |
| |___ entice An image viewer.
| |
| |___ etcher A GUI editor for window borders and more.
| |
| ...
|
\
libs
|___ ebits * A library for "bits", graphical layout structures.
|
|___ ecore * An X Windows wrapper and event loop library.
|
|___ edb * A database library based on Berkeley DB.
|
|___ etox A text layout engine.
|
|___ evas * A graphical canvas engine.
|
|___ ewl A widget library using evas.
|
|___ ewd A container library for hashes, lists etc.
|
|___ imlib2 * An image loading and manipulation library.
|
|___ imlib2_loaders * A set of loaders for imlib2, separated due to licensing issues.
</programlisting>
The modules you absolutely need to get &e17; running are marked
with an asterisk. The next thing you need to know is the build
sequence. A working sequence is the following:
<orderedlist>
<listitem>
<para>Edb</para>
</listitem>
<listitem>
<para>Imlib2</para>
</listitem>
<listitem>
<para>Imlib2 Loaders</para>
</listitem>
<listitem>
<para>Evas</para>
</listitem>
<listitem>
<para>Ebits</para>
</listitem>
<listitem>
<para>Ecore</para>
</listitem>
<listitem>
<para>Efsd</para>
</listitem>
<listitem>
<para>E 17</para>
</listitem>
</orderedlist>
Some of the modules have other dependencies, you need:
<itemizedlist mark="opencircle">
<listitem>
<para>For Imlib2, you need a few graphics libraries. [FIXME]</para>
</listitem>
<listitem>
<para>For Efsd, you need libxml2 from
(<ulink url="http://xmlsoft.org/">XMLSoft</ulink>) and fam from
(<ulink url="http://prdownloads.sourceforge.net/enlightenment/fam-oss-2.6.4-NULL-fix.tar.gz">Version 2.6.4</ulink> or a later version)
</para>
</listitem>
</itemizedlist>
<note>
<title>There's no real reason to build those packages from source.</title>
<para>
It's a lot easier
to just install the packages of your distribution. Do not forget to
install the development packages as well, or necessary C header files
won't be available during the build.
</para>
</note>
</para>
<para>
To build, you need recent versions of the following GNU tools:
<itemizedlist mark="opencircle">
<listitem>
<para><command>autoconf</command> 2.13 and <command>automake</command> 1.4 <emphasis>OR</emphasis></para>
</listitem>
<listitem>
<para><command>autoconf</command> 2.50+ and <command>automake</command> 1.5</para>
</listitem>
<listitem>
<para><command>gettext</command> 0.10.39 or newer</para>
</listitem>
<listitem>
<para><command>libtool</command> 1.4 or newer</para>
</listitem>
</itemizedlist>
Other combinations of <command>automake</command> and
<command>autoconf</command> may work, but are more
prone to errors.
</para>
</section>
<section id="architecture">
<title id="architecture.title">&e17; Architecture</title>
<section id="overall">
<title id="overall.title">Overview</title>
<para>
<mediaobject>
<imageobject>
<imagedata fileref="figures/architecture.eps" format="eps">
</imageobject>
<imageobject>
<imagedata fileref="figures/architecture.gif" format="gif">
</imageobject>
<textobject>
<phrase>Image of &e17; Architecture</phrase>
</textobject>
<caption>
<para>&e17; Architecture.</para>
</caption>
</mediaobject>
</para>
</section>
<section id="modules">
<title id="modules.title">Modules</title>
<para>
<itemizedlist mark="opencircle">
<listitem>
<para><command>e</command></para>
<para>This is the main &e17; applicaton. It handles managing
of windows, launching applications, managing icons and files
on your desktop and in directories, drag and drop etc.
</para>
</listitem>
<listitem>
<para><command>ecore</command></para>
<para>Ecore is a convenience library. It handles
abstracting X calls so you don't have to pass as many parameters to them. It
wraps lots of other sequences of X calls you want to do often, handles
caching local geometry of windows to save extra X traffic, abstracts X's
events and adds a timer system to be able to do timeouts, handles the core
event loops, abstracts signals into being events in the event queue, and lets
you arbitrarily add other file descriptors to the loop to listen on and have
handlers be called when they become active, and much much more. Ecore also
handles filtering events and calling idle handlers when appropriate. Ecore is
just what it says - a very complex CORE subsystem. It is all callback based,
and keeps everything abstracted - but does not move away from normal X11
primitives like other abstractions (GDK for example), thus keeping 100%
compatibility with normal Xlib stuff. The core innards of E17 rely heavily on
Ecore and its ability to not just work, but work well and optimize silently for
E17.
</para>
</listitem>
<listitem>
<para><command>evas</command></para>
<para>Evas is a canvas abstraction that uses Imlib2, as well
as OpenGL, and X11. It serves as a canvas accelerator and abstraction and
does the job really well. It has made building the rendering parts of
&e17; a lot easier.
</para>
</listitem>
<listitem>
<para><command>ebits</command></para>
<para>Ebits is a higher-level abstraction of image groups
built on top of Evas. Basically it's what the old E16 window border logic
was - but on steroids. It can do a lot more and is being used as the
basic building block for all widgets in E17. Etcher is a GUI editor that
can edit Ebits files - thus letting you have a nice GUI to
design your widgets, window borders etc. in.
</para>
</listitem>
<listitem>
<para><command>edb</command></para>
<para>Edb is a database abstraction layer to Berkeley
DB. Edb contains the source for DB 2.7.7, thus freezing the database
format on disk, making sure it will never become incompatible (as is a habit
of the DB interface in libc). Edb wraps this with a convenience and
optimization API layer, making database access easy, fast and consistent. It
handles typing of information in the database and much more. Edb is *VERY*
fast and all of E17 configuration management is built on top of it -
every configuration file is a database - including Ebits files. Also,
Efsd stores its metadata information in Edb databases.
</para>
</listitem>
<listitem>
<para><command>efsd</command></para>
<para>Efsd is the file system abstraction layer. It is a
library and a daemon process that the library communicates with for the
calling process (in this case E17). It handles all filing system interaction
in an asynchronous manner, so E17 isn't ever left blocking on basic IO
requests. It handles copying, renaming and deleting of files. Also listing of
directories, monitoring for changes in directories, retrieving stat
information on files, as well as metadata retrieval and modification for
files. All of this is done in an asynchronous request/event system thus
keeping E17 free to handle user interaction as much as possible while Efsd
does the nasty IO work.
</para>
</listitem>
<listitem>
<para><command>imlib2</command></para>
<para>Imlib2 is the abstraction layer that handles the
raw nasty work of loading images, saving them, rendering them to a drawable
or blending and scaling them onto other images, software anti-aliased
truetype fonts and other goodies. This one is pretty much done and finished
with. It gets minor updates and fixes as needed, but otherwise is left alone.
</para>
</listitem>
<listitem>
<para><command>imlib2_loaders</command></para>
<para>This is a collection of loaders that are not packaged with Imlib2
due to licensing issues or because the loaders are not commonly needed enough.
It currently contains a loader for Edb files (where images can be accessed
through character string keys) and a loader for Gimp's native XCF image
format.</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>
<section id="scripting">
<title id="scripting.title">Scripting &e17;</title>
<para>
&e17; provides hooks to allow script interaction with the core systems,
using the <ulink url="http://www.ferite.org">Ferite</ulink> scripting
language. There basic scripting support is in the code now, but it's
too early to think about writing larger scripts.
</para>
</section>
<section id="code">
<title>Code Documentation</title>
!Isrc/actions.h
!Isrc/border.h
!Isrc/desktops.h
!Isrc/entry.h
!Isrc/fs.h
!Isrc/guides.h
!Isrc/iconbar.c
!Isrc/icons.h
!Isrc/menu.h
!Isrc/menu.c
!Isrc/object.h
!Isrc/observer.h
!Isrc/place.h
!Isrc/view.h
</section>
<section id="roadmap">
<title id="roadmap.title">Roadmap</title>
<para>
</para>
</section>
</chapter>
</book>