1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/*
* rxvtperl.h
*/
#ifndef RXVTPERL_H_
#define RXVTPERL_H_
#if ENABLE_PERL
#define SHOULD_INVOKE(htype) \
( (htype) == HOOK_INIT \
|| (htype) == HOOK_DESTROY \
|| (htype) == HOOK_REFRESH_BEGIN \
|| (htype) == HOOK_REFRESH_END \
|| perl.should_invoke [htype])
#define HOOK_INVOKE(args) rxvt_perl.invoke args
enum data_type {
DT_END, // no further arguments
DT_INT,
DT_LONG,
DT_STR, // 0-terminated string
DT_STR_LEN, // string + length
DT_WCS_LEN, // wchar_t* + length
DT_LCS_LEN, // long* + length
DT_XEVENT,
};
enum hook_type {
# define def(sym) HOOK_ ## sym,
# include "hookinc.h"
# undef def
HOOK_NUM,
};
struct rxvt_perl_term
{
void *self;
unsigned long grabtime;
uint8_t should_invoke[HOOK_NUM];
// this object must be zero-initialised
rxvt_perl_term ()
{
should_invoke [HOOK_INIT] =
should_invoke [HOOK_DESTROY] = 1;
}
};
struct rxvt_perl_interp
{
char **perl_environ;
~rxvt_perl_interp ();
void init ();
void init (rxvt_term *term);
void eval (const char *str);
bool invoke (rxvt_term *term, hook_type htype, ...);
void line_update (rxvt_term *term);
void selection_finish (rxvt_selection *sel, char *data, unsigned int len);
void usage (rxvt_term *term, int type);
enum
{
RESOURCE_AVAILABLE = 1, // whether the option is valid
RESOURCE_ARG = 2 // whether the option eats the next arg
};
uint8_t parse_resource (rxvt_term *term, const char *name, bool arg, bool longopt, bool flag, const char *value);
};
extern struct rxvt_perl_interp rxvt_perl;
#else
#define SHOULD_INVOKE(htype) false
#define HOOK_INVOKE(args) false
#endif
#endif
|