mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-05 21:07:52 +00:00
Added some Lua API stuff.
Added conky_set_update_interval() API call, which allows you to change Conky's update interval from a Lua script. Added the 'conky_info' table to global Lua context, which still needs populating with stuff (right now it only contains the current update interval and the system uptime).
This commit is contained in:
parent
e124064892
commit
da4b542ae6
38
doc/lua.xml
38
doc/lua.xml
@ -12,6 +12,19 @@
|
|||||||
with the result.</para>
|
with the result.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>conky_set_update_interval(number)</option>
|
||||||
|
</command>
|
||||||
|
<option>function</option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Sets Conky's update interval (in seconds) to 'number'.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
@ -86,6 +99,31 @@
|
|||||||
is enabled.</para>
|
is enabled.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<command>
|
||||||
|
<option>conky_info</option>
|
||||||
|
</command>
|
||||||
|
<option>table</option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>This table contains some information about
|
||||||
|
Conky's internal data. The following table describes the
|
||||||
|
values contained:</para>
|
||||||
|
<simplelist>
|
||||||
|
<member>
|
||||||
|
<command>update_interval</command>
|
||||||
|
<option>Conky's update interval (in seconds).
|
||||||
|
</option>
|
||||||
|
</member>
|
||||||
|
<member>
|
||||||
|
<command>uptime</command>
|
||||||
|
<option>System uptime, in seconds.
|
||||||
|
</option>
|
||||||
|
</member>
|
||||||
|
</simplelist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<command>
|
<command>
|
||||||
|
21
src/conky.c
21
src/conky.c
@ -6136,6 +6136,12 @@ static void generate_text(void)
|
|||||||
total_updates++;
|
total_updates++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_update_interval(double interval)
|
||||||
|
{
|
||||||
|
update_interval = interval;
|
||||||
|
update_interval_old = interval;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int get_string_width(const char *s)
|
static inline int get_string_width(const char *s)
|
||||||
{
|
{
|
||||||
#ifdef X11
|
#ifdef X11
|
||||||
@ -7104,6 +7110,9 @@ static void update_text(void)
|
|||||||
clear_text(1);
|
clear_text(1);
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
need_to_update = 1;
|
need_to_update = 1;
|
||||||
|
#ifdef HAVE_LUA
|
||||||
|
llua_update_info(&info, update_interval);
|
||||||
|
#endif /* HAVE_LUA */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SYS_INOTIFY_H
|
#ifdef HAVE_SYS_INOTIFY_H
|
||||||
@ -7552,6 +7561,9 @@ static void main_loop(void)
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_SYS_INOTIFY_H */
|
#endif /* HAVE_SYS_INOTIFY_H */
|
||||||
|
|
||||||
|
#ifdef HAVE_LUA
|
||||||
|
llua_update_info(&info, update_interval);
|
||||||
|
#endif /* HAVE_LUA */
|
||||||
g_signal_pending = 0;
|
g_signal_pending = 0;
|
||||||
}
|
}
|
||||||
clean_up(NULL, NULL);
|
clean_up(NULL, NULL);
|
||||||
@ -7884,8 +7896,7 @@ static void set_default_configurations(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
no_buffers = 1;
|
no_buffers = 1;
|
||||||
update_interval = 3.0;
|
set_update_interval(3);
|
||||||
update_interval_old = update_interval;
|
|
||||||
update_interval_bat = NOBATTERY;
|
update_interval_bat = NOBATTERY;
|
||||||
info.music_player_interval = 1.0;
|
info.music_player_interval = 1.0;
|
||||||
stuff_in_uppercase = 0;
|
stuff_in_uppercase = 0;
|
||||||
@ -8653,8 +8664,7 @@ static void load_config_file(const char *f)
|
|||||||
}
|
}
|
||||||
CONF("update_interval") {
|
CONF("update_interval") {
|
||||||
if (value) {
|
if (value) {
|
||||||
update_interval = strtod(value, 0);
|
set_update_interval(strtod(value, 0));
|
||||||
update_interval_old = update_interval;
|
|
||||||
} else {
|
} else {
|
||||||
CONF_ERR;
|
CONF_ERR;
|
||||||
}
|
}
|
||||||
@ -9298,6 +9308,9 @@ void initialisation(int argc, char **argv) {
|
|||||||
xargv = argv;
|
xargv = argv;
|
||||||
X11_create_window();
|
X11_create_window();
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
|
#ifdef HAVE_LUA
|
||||||
|
llua_setup_info(&info, update_interval);
|
||||||
|
#endif /* HAVE_LUA */
|
||||||
|
|
||||||
/* Set signal handlers */
|
/* Set signal handlers */
|
||||||
act.sa_handler = signal_handler;
|
act.sa_handler = signal_handler;
|
||||||
|
10
src/conky.h
10
src/conky.h
@ -107,10 +107,6 @@ char *strndup(const char *s, size_t n);
|
|||||||
#include "weather.h"
|
#include "weather.h"
|
||||||
#endif /* WEATHER */
|
#endif /* WEATHER */
|
||||||
|
|
||||||
#ifdef HAVE_LUA
|
|
||||||
#include "llua.h"
|
|
||||||
#endif /* HAVE_LUA */
|
|
||||||
|
|
||||||
#ifdef TCP_PORT_MONITOR
|
#ifdef TCP_PORT_MONITOR
|
||||||
#include "tcp-portmon.h"
|
#include "tcp-portmon.h"
|
||||||
#endif
|
#endif
|
||||||
@ -309,6 +305,10 @@ struct information {
|
|||||||
short kflags; /* kernel settings, see enum KFLAG */
|
short kflags; /* kernel settings, see enum KFLAG */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_LUA
|
||||||
|
#include "llua.h"
|
||||||
|
#endif /* HAVE_LUA */
|
||||||
|
|
||||||
/* needed by linux.c and top.c -> outsource somewhere */
|
/* needed by linux.c and top.c -> outsource somewhere */
|
||||||
enum {
|
enum {
|
||||||
/* set to true if kernel uses "long" format for /proc/stats */
|
/* set to true if kernel uses "long" format for /proc/stats */
|
||||||
@ -374,6 +374,8 @@ enum x_initialiser_state {
|
|||||||
extern int output_methods;
|
extern int output_methods;
|
||||||
extern enum x_initialiser_state x_initialised;
|
extern enum x_initialiser_state x_initialised;
|
||||||
|
|
||||||
|
void set_update_interval(double interval);
|
||||||
|
|
||||||
#define DEFAULT_TEXT_BUFFER_SIZE_S "##DEFAULT_TEXT_BUFFER_SIZE"
|
#define DEFAULT_TEXT_BUFFER_SIZE_S "##DEFAULT_TEXT_BUFFER_SIZE"
|
||||||
|
|
||||||
#define NOBATTERY 0
|
#define NOBATTERY 0
|
||||||
|
90
src/llua.c
90
src/llua.c
@ -63,6 +63,23 @@ static int llua_conky_parse(lua_State *L)
|
|||||||
return 1; /* number of results */
|
return 1; /* number of results */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int llua_conky_set_update_interval(lua_State *L)
|
||||||
|
{
|
||||||
|
int n = lua_gettop(L); /* number of arguments */
|
||||||
|
double value;
|
||||||
|
if (n != 1) {
|
||||||
|
lua_pushstring(L, "incorrect arguments, conky_set_update_interval(number) takes exactly 1 argument");
|
||||||
|
lua_error(L);
|
||||||
|
}
|
||||||
|
if (!lua_isnumber(L, 1)) {
|
||||||
|
lua_pushstring(L, "incorrect argument (expecting a string)");
|
||||||
|
lua_error(L);
|
||||||
|
}
|
||||||
|
value = lua_tonumber(L, 1);
|
||||||
|
set_update_interval(value);
|
||||||
|
return 0; /* number of results */
|
||||||
|
}
|
||||||
|
|
||||||
void llua_init(void)
|
void llua_init(void)
|
||||||
{
|
{
|
||||||
const char *libs = PACKAGE_LIBDIR"/lib?.so;";
|
const char *libs = PACKAGE_LIBDIR"/lib?.so;";
|
||||||
@ -102,6 +119,9 @@ void llua_init(void)
|
|||||||
lua_pushcfunction(lua_L, &llua_conky_parse);
|
lua_pushcfunction(lua_L, &llua_conky_parse);
|
||||||
lua_setglobal(lua_L, "conky_parse");
|
lua_setglobal(lua_L, "conky_parse");
|
||||||
|
|
||||||
|
lua_pushcfunction(lua_L, &llua_conky_set_update_interval);
|
||||||
|
lua_setglobal(lua_L, "conky_set_update_interval");
|
||||||
|
|
||||||
#if defined(X11) && defined(LUA_EXTRAS)
|
#if defined(X11) && defined(LUA_EXTRAS)
|
||||||
/* register tolua++ user types */
|
/* register tolua++ user types */
|
||||||
tolua_open(lua_L);
|
tolua_open(lua_L);
|
||||||
@ -360,6 +380,12 @@ void llua_inotify_query(int wd, int mask)
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_SYS_INOTIFY_H */
|
#endif /* HAVE_SYS_INOTIFY_H */
|
||||||
|
|
||||||
|
void llua_set_number(const char *key, double value)
|
||||||
|
{
|
||||||
|
lua_pushnumber(lua_L, value);
|
||||||
|
lua_setfield(lua_L, -2, key);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef X11
|
#ifdef X11
|
||||||
void llua_draw_pre_hook(void)
|
void llua_draw_pre_hook(void)
|
||||||
{
|
{
|
||||||
@ -383,12 +409,6 @@ void llua_set_draw_post_hook(const char *args)
|
|||||||
draw_post = strdup(args);
|
draw_post = strdup(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void llua_set_long(const char *key, long value)
|
|
||||||
{
|
|
||||||
lua_pushnumber(lua_L, value);
|
|
||||||
lua_setfield(lua_L, -2, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef LUA_EXTRAS
|
#ifdef LUA_EXTRAS
|
||||||
void llua_set_userdata(const char *key, const char *type, void *value)
|
void llua_set_userdata(const char *key, const char *type, void *value)
|
||||||
{
|
{
|
||||||
@ -410,16 +430,16 @@ void llua_setup_window_table(int text_start_x, int text_start_y, int text_width,
|
|||||||
#endif /* LUA_EXTRAS */
|
#endif /* LUA_EXTRAS */
|
||||||
|
|
||||||
|
|
||||||
llua_set_long("width", window.width);
|
llua_set_number("width", window.width);
|
||||||
llua_set_long("height", window.height);
|
llua_set_number("height", window.height);
|
||||||
llua_set_long("border_inner_margin", window.border_inner_margin);
|
llua_set_number("border_inner_margin", window.border_inner_margin);
|
||||||
llua_set_long("border_outer_margin", window.border_outer_margin);
|
llua_set_number("border_outer_margin", window.border_outer_margin);
|
||||||
llua_set_long("border_width", window.border_width);
|
llua_set_number("border_width", window.border_width);
|
||||||
|
|
||||||
llua_set_long("text_start_x", text_start_x);
|
llua_set_number("text_start_x", text_start_x);
|
||||||
llua_set_long("text_start_y", text_start_y);
|
llua_set_number("text_start_y", text_start_y);
|
||||||
llua_set_long("text_width", text_width);
|
llua_set_number("text_width", text_width);
|
||||||
llua_set_long("text_height", text_height);
|
llua_set_number("text_height", text_height);
|
||||||
|
|
||||||
lua_setglobal(lua_L, "conky_window");
|
lua_setglobal(lua_L, "conky_window");
|
||||||
}
|
}
|
||||||
@ -436,15 +456,43 @@ void llua_update_window_table(int text_start_x, int text_start_y, int text_width
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
llua_set_long("width", window.width);
|
llua_set_number("width", window.width);
|
||||||
llua_set_long("height", window.height);
|
llua_set_number("height", window.height);
|
||||||
|
|
||||||
llua_set_long("text_start_x", text_start_x);
|
llua_set_number("text_start_x", text_start_x);
|
||||||
llua_set_long("text_start_y", text_start_y);
|
llua_set_number("text_start_y", text_start_y);
|
||||||
llua_set_long("text_width", text_width);
|
llua_set_number("text_width", text_width);
|
||||||
llua_set_long("text_height", text_height);
|
llua_set_number("text_height", text_height);
|
||||||
|
|
||||||
lua_setglobal(lua_L, "conky_window");
|
lua_setglobal(lua_L, "conky_window");
|
||||||
}
|
}
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
|
|
||||||
|
void llua_setup_info(struct information *i, double u_interval)
|
||||||
|
{
|
||||||
|
if (!lua_L) return;
|
||||||
|
lua_newtable(lua_L);
|
||||||
|
|
||||||
|
llua_set_number("update_interval", u_interval);
|
||||||
|
llua_set_number("uptime", i->uptime);
|
||||||
|
|
||||||
|
lua_setglobal(lua_L, "conky_info");
|
||||||
|
}
|
||||||
|
|
||||||
|
void llua_update_info(struct information *i, double u_interval)
|
||||||
|
{
|
||||||
|
if (!lua_L) return;
|
||||||
|
|
||||||
|
lua_getglobal(lua_L, "conky_info");
|
||||||
|
if (lua_isnil(lua_L, -1)) {
|
||||||
|
/* window table isn't populated yet */
|
||||||
|
lua_pop(lua_L, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
llua_set_number("update_interval", u_interval);
|
||||||
|
llua_set_number("uptime", i->uptime);
|
||||||
|
|
||||||
|
lua_setglobal(lua_L, "conky_info");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -59,4 +59,7 @@ void llua_setup_window_table(int text_start_x, int text_start_y, int text_width,
|
|||||||
void llua_update_window_table(int text_start_x, int text_start_y, int text_width, int text_height);
|
void llua_update_window_table(int text_start_x, int text_start_y, int text_width, int text_height);
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
|
|
||||||
|
void llua_setup_info(struct information *i, double u_interval);
|
||||||
|
void llua_update_info(struct information *i, double u_interval);
|
||||||
|
|
||||||
#endif /* LUA_H_*/
|
#endif /* LUA_H_*/
|
||||||
|
Loading…
Reference in New Issue
Block a user