Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
E.h actions.c comms.c config.c dialog.c handlers.c ipc.c
main.c session.c
Log Message:
Trivial session cleanups.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.170
retrieving revision 1.171
diff -u -3 -r1.170 -r1.171
--- E.h 3 Jan 2004 12:29:57 -0000 1.170
+++ E.h 3 Jan 2004 12:55:08 -0000 1.171
@@ -2406,9 +2406,10 @@
void ArrangeEwinXY(EWin * ewin, int *px, int *py);
void ArrangeEwinCenteredXY(EWin * ewin, int *px, int *py);
+/* session.c */
void SessionInit(void);
void SessionSave(int shutdown);
-void doSMExit(void *params);
+int SessionExit(void *params);
void ProcessICEMSGS(void);
int GetSMfd(void);
void SessionGetInfo(EWin * ewin, Atom atom_change);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/actions.c,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -3 -r1.124 -r1.125
--- actions.c 3 Jan 2004 12:29:57 -0000 1.124
+++ actions.c 3 Jan 2004 12:55:08 -0000 1.125
@@ -845,7 +845,7 @@
/* This function is now handled in session.c */
if (InZoom())
Zoom(NULL);
- doSMExit(params);
+ SessionExit(params);
EDBUG_RETURN(0);
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/comms.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- comms.c 3 Jan 2004 12:29:58 -0000 1.39
+++ comms.c 3 Jan 2004 12:55:08 -0000 1.40
@@ -441,7 +441,7 @@
{
SetDefaultTheme(buf);
Esnprintf(sss, sizeof(sss), "restart_theme %s", buf);
- doExit(sss);
+ SessionExit(sss);
}
}
else if (!strcmp(w, "list_bg"))
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/config.c,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -3 -r1.79 -r1.80
--- config.c 3 Jan 2004 12:29:58 -0000 1.79
+++ config.c 3 Jan 2004 12:55:08 -0000 1.80
@@ -3250,7 +3250,7 @@
"This is a FATAL ERROR.\n"
"This is probably due to either the program not existing or\n"
"it not being able to be executed by you.\n"), epp_path);
- doExit(_("error"));
+ SessionExit("error");
}
else
have_epp = 1;
@@ -3401,7 +3401,7 @@
"features in Enlightenment in new versions.\n"),
e_cfg_ver, min_e_cfg_ver);
RESET_ALERT;
- doExit("restart_theme DEFAULT");
+ SessionExit("restart_theme DEFAULT");
}
else
{
@@ -3423,7 +3423,7 @@
"your liking again safely.\n"), e_cfg_ver,
min_e_cfg_ver);
RESET_ALERT;
- doExit("restart");
+ SessionExit("restart");
}
}
else
@@ -4229,6 +4229,6 @@
XKillClient(disp, init_win_ext);
init_win_ext = 0;
}
- doExit("restart");
+ SessionExit("restart");
}
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/dialog.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -3 -r1.71 -r1.72
--- dialog.c 3 Jan 2004 12:21:52 -0000 1.71
+++ dialog.c 3 Jan 2004 12:55:08 -0000 1.72
@@ -2128,7 +2128,7 @@
void
DialogRestart(int val, void *data)
{
- doExit("restart");
+ SessionExit("restart");
val = 0;
data = NULL;
}
@@ -2136,7 +2136,7 @@
void
DialogQuit(int val, void *data)
{
- doExit("error");
+ SessionExit("error");
val = 0;
data = NULL;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/handlers.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- handlers.c 5 Nov 2003 17:24:44 -0000 1.29
+++ handlers.c 3 Jan 2004 12:55:08 -0000 1.30
@@ -33,7 +33,7 @@
switch (sig)
{
case SIGHUP:
- doExit("restart");
+ SessionExit("restart");
break;
default:
@@ -41,7 +41,7 @@
case SIGQUIT:
case SIGABRT:
case SIGTERM:
- doExit("error");
+ SessionExit("error");
break;
case SIGPIPE:
@@ -61,7 +61,7 @@
"either obtain the correct package for your system, or\n"
"re-compile Enlightenment and possibly any support libraries\n"
"that you got in binary format to run Enlightenment.\n"));
- doExit("error");
+ SessionExit("error");
break;
case SIGFPE:
@@ -77,7 +77,7 @@
"Enlightenment under gdb so you can backtrace for where it died
and\n"
"send in a useful bug report with backtrace information and
variable\n"
"dumps etc.\n"));
- doExit("error");
+ SessionExit("error");
break;
case SIGSEGV:
@@ -225,7 +225,7 @@
{
EDBUG(7, "HandleXIOError");
disp = NULL;
- doExit("error");
+ SessionExit("error");
EDBUG_RETURN_;
d = NULL;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -3 -r1.126 -r1.127
--- ipc.c 3 Jan 2004 12:29:58 -0000 1.126
+++ ipc.c 3 Jan 2004 12:55:08 -0000 1.127
@@ -4377,7 +4377,7 @@
c = NULL;
params = NULL;
- doExit("restart");
+ SessionExit("restart");
}
@@ -4390,7 +4390,7 @@
{
Esnprintf(buf, sizeof(buf), "restart_wm %s", params);
params = NULL;
- doExit(buf);
+ SessionExit(buf);
}
else
{
@@ -4408,7 +4408,7 @@
{
Esnprintf(buf, sizeof(buf), "restart_theme %s", params);
params = NULL;
- doExit(buf);
+ SessionExit(buf);
}
else
{
@@ -4423,9 +4423,9 @@
c = NULL;
if (params)
- doExit("quit");
+ SessionExit("quit");
else
- doExit("logout");
+ SessionExit("logout");
}
static void
@@ -4451,7 +4451,7 @@
SetDefaultTheme(params);
Esnprintf(restartcommand, sizeof(restartcommand),
"restart_theme %s", params);
- doExit(restartcommand);
+ SessionExit(restartcommand);
}
else
{
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/main.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -3 -r1.66 -r1.67
--- main.c 3 Jan 2004 12:29:58 -0000 1.66
+++ main.c 3 Jan 2004 12:55:08 -0000 1.67
@@ -90,8 +90,9 @@
AssignExitText(_("Quit Enlightenment"));
/* We'll set up what the buttons do now, too */
- AssignRestartFunction(doExit, "restart");
- AssignExitFunction(doExit, NULL);
+ AssignRestartFunction(SessionExit, "restart");
+ AssignExitFunction(SessionExit, NULL);
+
srand(time(NULL));
if (!uname(&ubuf))
@@ -244,10 +245,7 @@
/* make all of our fallback classes */
SetupFallbackClasses();
UngrabX();
- /* We'll set up what the buttons do now, too */
- /* again? why are we doing this twice? */
- AssignRestartFunction((*doExit), duplicate("restart"));
- AssignExitFunction((*EExit), (void *)1);
+
desks.desk[0].viewable = 0;
/* now we're going to load the configuration/theme */
LoadEConfig(themepath);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/session.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -3 -r1.47 -r1.48
--- session.c 3 Jan 2004 12:29:58 -0000 1.47
+++ session.c 3 Jan 2004 12:55:08 -0000 1.48
@@ -38,6 +38,8 @@
#endif
+static int sm_fd = -1;
+
/* Generate a unique temporary file name from TEMPLATE.
* The last six characters of TEMPLATE must be "XXXXXX";
* they are replaced with a string that makes the filename unique.
@@ -449,188 +451,7 @@
}
}
-#ifndef HAVE_X11_SM_SMLIB_H
-
-void
-SessionInit(void)
-{
- int i;
-
- LoadWindowStates();
-}
-
-void
-ProcessICEMSGS(void)
-{
-}
-
-int
-GetSMfd(void)
-{
- return -1;
-}
-
-void
-SessionGetInfo(EWin * ewin, Atom atom_change)
-{
-}
-
-void
-SetSMID(char *smid)
-{
-}
-
-void
-SaveSession(int shutdown)
-{
- /* don't need */
- /* autosave(); */
-}
-
-static void
-LogoutCB(int val, void *data)
-{
- doSMExit(NULL);
- val = 0;
- data = NULL;
-}
-
-static void
-CB_SettingsEscape(int val, void *data)
-{
- DialogClose((Dialog *) data);
- val = 0;
-}
-
-/* This is the original code from actions.c(doExit). */
-void
-doSMExit(void *params)
-{
- char s[1024];
- char *real_exec;
- char sss[FILEPATH_LEN_MAX];
- Window w;
- char master_flag, do_master_kill;
-
- master_flag = (master_pid == getpid())? 1 : 0;
-
- do_master_kill = 1;
-
- if (!params)
- SaveSession(1);
- if ((disp) && ((!params) || ((params) && strcmp((char *)params, "logout"))))
- SetEInfoOnAll();
-
- if (params)
- {
- SoundExit();
-#ifndef __EMX__
- setsid();
-#endif
- sscanf(params, "%1000s", s);
- if (mustdel)
- {
-#ifndef __EMX__
- Esnprintf(sss, sizeof(sss), "/bin/rm -rf %s", themepath);
-#else
- Esnprintf(sss, sizeof(sss), "rm.exe -rf %s", themepath);
-#endif
- system(sss);
- }
- if (!strcmp(s, "restart"))
- {
- SoundPlay("SOUND_WAIT");
- if (sound_fd >= 0)
- close(sound_fd);
- w = MakeExtInitWin();
- XCloseDisplay(disp);
- disp = NULL;
-
- if (themepath[0] != 0)
- {
- Esnprintf(sss, sizeof(sss),
- "exec %s -single -ext_init_win %i -theme %s "
- "-econfdir %s -ecachedir %s", command,
- w, themename, UserEDir(), UserCacheDir());
- execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
- }
- else
- {
- Esnprintf(sss, sizeof(sss),
- "exec %s -single -ext_init_win %i "
- "-econfdir %s -ecachedir %s", command,
- w, UserEDir(), UserCacheDir());
- execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
- }
- }
- else if (!strcmp(s, "restart_theme"))
- {
- SoundPlay("SOUND_WAIT");
- if (sound_fd >= 0)
- close(sound_fd);
- w = MakeExtInitWin();
- XCloseDisplay(disp);
- disp = NULL;
- sscanf(params, "%*s %1000s", s);
- Esnprintf(sss, sizeof(sss),
- "exec %s -single -ext_init_win %i -theme %s "
- "-econfdir %s -ecachedir %s", command, w, s,
- UserEDir(), UserCacheDir());
- execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
- }
- else if (!strcmp(s, "restart_wm"))
- {
- SoundPlay("SOUND_EXIT");
- if (sound_fd >= 0)
- close(sound_fd);
- XCloseDisplay(disp);
- disp = NULL;
- if (atword(params, 2))
- strncpy(s, atword(params, 2), 1000);
- real_exec = (char *)Emalloc(strlen(s) + 6);
- sprintf(real_exec,
- "exec %s " "-econfdir %s -ecachedir %s", s,
- UserEDir(), UserCacheDir());
- execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", "exec", real_exec,
- NULL);
- }
- else if (!strcmp(s, "logout"))
- {
- Dialog *d;
- EWin *ewin;
-
- if (!
- (d =
- FindItem("LOGOUT_DIALOG", 0, LIST_FINDBY_NAME,
- LIST_TYPE_DIALOG)))
- {
- SoundPlay("SOUND_LOGOUT");
- d = DialogCreate("LOGOUT_DIALOG");
- DialogSetTitle(d, "Are you sure?");
- DialogSetText(d,
- "\n" "\n"
- " Are you sure you wish to log out ? \n"
- "\n" "\n");
- DialogAddButton(d, " Yes, Log Out ", LogoutCB, 1);
- DialogAddButton(d, " No ", NULL, 1);
- DialogBindKey(d, "Escape", CB_SettingsEscape, 0, d);
- DialogBindKey(d, "Return", LogoutCB, 0, d);
- }
- ShowDialog(d);
- ewin = FindEwinByDialog(d);
- if (ewin)
- {
- ArrangeEwinCentered(ewin, 1);
- }
- return;
- }
- }
-
- SoundPlay("SOUND_EXIT");
- EExit(0);
-}
-
-#else /* HAVE_X11_SM_SMLIB_H */
+#ifdef HAVE_X11_SM_SMLIB_H
#include <X11/SM/SMlib.h>
@@ -641,7 +462,6 @@
static char *sm_client_id = NULL;
static SmcConn sm_conn = NULL;
-static int sm_fd = -1;
/* True if we are saving state for a doExit("restart") */
static int restarting = False;
@@ -778,7 +598,7 @@
}
if (restarting)
{
- Esnprintf(buf, sizeof(buf), "%i", (unsigned)init_win_ext);
+ Esnprintf(buf, sizeof(buf), "%li", init_win_ext);
restartVal[n].length = strlen(extinitwin);
restartVal[n++].value = extinitwin;
@@ -937,9 +757,12 @@
connection = 0;
}
+#endif /* HAVE_X11_SM_SMLIB_H */
+
void
SessionInit(void)
{
+#ifdef HAVE_X11_SM_SMLIB_H
static SmPointer context;
SmcCallbacks callbacks;
@@ -1003,12 +826,15 @@
fcntl(sm_fd, F_SETFD, fcntl(sm_fd, F_GETFD, 0) | FD_CLOEXEC);
}
stale_sm_file = 1;
+#endif /* HAVE_X11_SM_SMLIB_H */
+
LoadWindowStates();
}
void
ProcessICEMSGS(void)
{
+#ifdef HAVE_X11_SM_SMLIB_H
IceProcessMessagesStatus status;
if (sm_fd < 0)
@@ -1028,6 +854,7 @@
sm_conn = NULL;
sm_fd = -1;
}
+#endif /* HAVE_X11_SM_SMLIB_H */
}
int
@@ -1039,6 +866,7 @@
void
SessionGetInfo(EWin * ewin, Atom atom_change)
{
+#ifdef HAVE_X11_SM_SMLIB_H
char *s;
Window *w;
int size;
@@ -1069,41 +897,47 @@
}
Efree(w);
}
+#endif /* HAVE_X11_SM_SMLIB_H */
}
void
SetSMID(char *smid)
{
+#ifdef HAVE_X11_SM_SMLIB_H
sm_client_id = smid;
+#endif /* HAVE_X11_SM_SMLIB_H */
}
+static void doSMExit(void *params);
static void
LogoutCB(int val, void *data)
{
+#ifdef HAVE_X11_SM_SMLIB_H
if (sm_conn)
{
SmcRequestSaveYourself(sm_conn, SmSaveBoth, True, SmInteractStyleAny,
False, True);
}
else
+#endif /* HAVE_X11_SM_SMLIB_H */
{
doSMExit(NULL);
}
- val = 0;
- data = NULL;
}
void
SaveSession(int shutdown)
{
/* dont' need anymore */
- /* ayosave(); */
+ /* autosave(); */
+#ifdef HAVE_X11_SM_SMLIB_H
if (shutdown && sm_conn)
{
SmcCloseConnection(sm_conn, 0, NULL);
sm_conn = NULL;
sm_fd = -1;
}
+#endif /* HAVE_X11_SM_SMLIB_H */
}
static void
@@ -1113,6 +947,8 @@
val = 0;
}
+#ifdef HAVE_X11_SM_SMLIB_H
+
/*
* Normally, the SM will throw away all the session data for a client
* that breaks its connection unexpectedly. In order to avoid this we
@@ -1122,7 +958,7 @@
* and then restore it on restart. We grab X input via the ext_init_win
* so the our clients remain frozen while we are down.
*/
-void
+static void
doSMExit(void *params)
{
char s[1024];
@@ -1198,16 +1034,16 @@
{
if (sm_client_id)
Esnprintf(s, sizeof(s),
- "exec %s -single -ext_init_win %i -theme %s "
+ "exec %s -single -ext_init_win %li -theme %s "
"-econfdir %s -ecachedir %s "
"-smfile %s -smid %s", command,
- (unsigned)init_win_ext, themename, UserEDir(),
+ init_win_ext, themename, UserEDir(),
UserCacheDir(), sm_file, sm_client_id);
else
Esnprintf(s, sizeof(s),
- "exec %s -single -ext_init_win %i -theme %s "
+ "exec %s -single -ext_init_win %li -theme %s "
"-econfdir %s -ecachedir %s "
- "-smfile %s", command, (unsigned)init_win_ext,
+ "-smfile %s", command, init_win_ext,
themename, UserEDir(), UserCacheDir(), sm_file);
execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", s, NULL);
}
@@ -1215,16 +1051,16 @@
{
if (sm_client_id)
Esnprintf(s, sizeof(s),
- "exec %s -single -ext_init_win %i "
+ "exec %s -single -ext_init_win %li "
"-econfdir %s -ecachedir %s "
"-smfile %s -smid %s", command,
- (unsigned)init_win_ext, UserEDir(), UserCacheDir(),
+ init_win_ext, UserEDir(), UserCacheDir(),
sm_file, sm_client_id);
else
Esnprintf(s, sizeof(s),
- "exec %s -single -ext_init_win %i"
+ "exec %s -single -ext_init_win %li"
"-econfdir %s -ecachedir %s "
- "-smfile %s", command, (unsigned)init_win_ext,
+ "-smfile %s", command, init_win_ext,
UserEDir(), UserCacheDir(), sm_file);
execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", s, NULL);
}
@@ -1245,16 +1081,16 @@
}
if (sm_client_id)
Esnprintf(s, sizeof(s),
- "exec %s -single -ext_init_win %i -theme %s "
+ "exec %s -single -ext_init_win %li -theme %s "
"-econfdir %s -ecachedir %s "
- "-smfile %s -smid %s", command, (unsigned)init_win_ext,
+ "-smfile %s -smid %s", command, init_win_ext,
userthemepath, UserEDir(), UserCacheDir(), sm_file,
sm_client_id);
else
Esnprintf(s, sizeof(s),
- "exec %s -ext_init_win %i -theme %s "
+ "exec %s -ext_init_win %li -theme %s "
"-econfdir %s -ecachedir %s "
- "-smfile %s -single", command, (unsigned)init_win_ext,
+ "-smfile %s -single", command, init_win_ext,
userthemepath, UserEDir(), UserCacheDir(), sm_file);
execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", s, NULL);
}
@@ -1269,4 +1105,135 @@
EExit(0);
}
+#else /* HAVE_X11_SM_SMLIB_H */
+
+/* This is the original code from actions.c(doExit). */
+static void
+doSMExit(void *params)
+{
+ char s[1024];
+ char *real_exec;
+ char sss[FILEPATH_LEN_MAX];
+ Window w;
+ char master_flag, do_master_kill;
+
+ master_flag = (master_pid == getpid())? 1 : 0;
+
+ do_master_kill = 1;
+
+ if (!params)
+ SaveSession(1);
+ if ((disp) && ((!params) || ((params) && strcmp((char *)params, "logout"))))
+ SetEInfoOnAll();
+
+ if (params)
+ {
+ SoundExit();
+#ifndef __EMX__
+ setsid();
+#endif
+ sscanf(params, "%1000s", s);
+ if (mustdel)
+ {
+#ifndef __EMX__
+ Esnprintf(sss, sizeof(sss), "/bin/rm -rf %s", themepath);
+#else
+ Esnprintf(sss, sizeof(sss), "rm.exe -rf %s", themepath);
+#endif
+ system(sss);
+ }
+ if (!strcmp(s, "restart"))
+ {
+ SoundPlay("SOUND_WAIT");
+ w = MakeExtInitWin();
+ XCloseDisplay(disp);
+ disp = NULL;
+
+ if (themepath[0] != 0)
+ {
+ Esnprintf(sss, sizeof(sss),
+ "exec %s -single -ext_init_win %li -theme %s "
+ "-econfdir %s -ecachedir %s", command,
+ w, themename, UserEDir(), UserCacheDir());
+ execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
+ }
+ else
+ {
+ Esnprintf(sss, sizeof(sss),
+ "exec %s -single -ext_init_win %li "
+ "-econfdir %s -ecachedir %s", command,
+ w, UserEDir(), UserCacheDir());
+ execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
+ }
+ }
+ else if (!strcmp(s, "restart_theme"))
+ {
+ SoundPlay("SOUND_WAIT");
+ w = MakeExtInitWin();
+ XCloseDisplay(disp);
+ disp = NULL;
+ sscanf(params, "%*s %1000s", s);
+ Esnprintf(sss, sizeof(sss),
+ "exec %s -single -ext_init_win %li -theme %s "
+ "-econfdir %s -ecachedir %s", command, w, s,
+ UserEDir(), UserCacheDir());
+ execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", sss, NULL);
+ }
+ else if (!strcmp(s, "restart_wm"))
+ {
+ SoundPlay("SOUND_EXIT");
+ XCloseDisplay(disp);
+ disp = NULL;
+ if (atword(params, 2))
+ strncpy(s, atword(params, 2), 1000);
+ real_exec = (char *)Emalloc(strlen(s) + 6);
+ sprintf(real_exec,
+ "exec %s " "-econfdir %s -ecachedir %s", s,
+ UserEDir(), UserCacheDir());
+ execl(DEFAULT_SH_PATH, DEFAULT_SH_PATH, "-c", "exec", real_exec,
+ NULL);
+ }
+ else if (!strcmp(s, "logout"))
+ {
+ Dialog *d;
+ EWin *ewin;
+
+ if (!
+ (d =
+ FindItem("LOGOUT_DIALOG", 0, LIST_FINDBY_NAME,
+ LIST_TYPE_DIALOG)))
+ {
+ SoundPlay("SOUND_LOGOUT");
+ d = DialogCreate("LOGOUT_DIALOG");
+ DialogSetTitle(d, "Are you sure?");
+ DialogSetText(d,
+ "\n" "\n"
+ " Are you sure you wish to log out ? \n"
+ "\n" "\n");
+ DialogAddButton(d, " Yes, Log Out ", LogoutCB, 1);
+ DialogAddButton(d, " No ", NULL, 1);
+ DialogBindKey(d, "Escape", CB_SettingsEscape, 0, d);
+ DialogBindKey(d, "Return", LogoutCB, 0, d);
+ }
+ ShowDialog(d);
+ ewin = FindEwinByDialog(d);
+ if (ewin)
+ {
+ ArrangeEwinCentered(ewin, 1);
+ }
+ return;
+ }
+ }
+
+ SoundPlay("SOUND_EXIT");
+ EExit(0);
+}
+
#endif /* HAVE_X11_SM_SMLIB_H */
+
+int
+SessionExit(void *param)
+{
+ doSMExit(param);
+ return 0;
+}
-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs