awesome.spawn(): Return the PID

This modifies awesome.spawn() to return the process ID of the started process
which could e.g. be used for matching against _NET_WM_PID.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Uli Schlachter 2010-04-24 11:49:57 +02:00 committed by Julien Danjou
parent 81ce9f7210
commit ad5d160c6c
1 changed files with 13 additions and 6 deletions

19
spawn.c
View File

@ -259,20 +259,23 @@ spawn_launchee_timeout(struct ev_loop *loop, ev_timer *w, int revents)
* g_spawn_async. * g_spawn_async.
* \return g_spawn_async value. * \return g_spawn_async value.
*/ */
static gboolean static GPid
spawn_command(const gchar *command_line, GError **error) spawn_command(const gchar *command_line, GError **error)
{ {
gboolean retval; gboolean retval;
GPid pid;
gchar **argv = 0; gchar **argv = 0;
if(!g_shell_parse_argv(command_line, NULL, &argv, error)) if(!g_shell_parse_argv(command_line, NULL, &argv, error))
return FALSE; return 0;
retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, error); NULL, NULL, &pid, error);
g_strfreev (argv); g_strfreev (argv);
return retval; if (!retval)
return 0;
return pid;
} }
/** Spawn a program. /** Spawn a program.
@ -344,7 +347,8 @@ luaA_spawn(lua_State *L)
} }
GError *error = NULL; GError *error = NULL;
if(!spawn_command(cmd, &error)) GPid pid = spawn_command(cmd, &error);
if(!pid)
{ {
/* push error on stack */ /* push error on stack */
lua_pushstring(L, error->message); lua_pushstring(L, error->message);
@ -354,7 +358,10 @@ luaA_spawn(lua_State *L)
return 1; return 1;
} }
return 0; /* push pid on stack */
lua_pushnumber(L, pid);
return 1;
} }
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80