Skip to content

Commit 4330dbe

Browse files
committed
add "print format" signal to perl
fix syntax in signals.txt with regards to GLists simplify signal emit code
1 parent 784373a commit 4330dbe

File tree

8 files changed

+229
-176
lines changed

8 files changed

+229
-176
lines changed

docs/signals.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ FE common
251251
* Provides signals:
252252

253253
completion.c:
254-
"complete word", GList * of char*, WINDOW_REC, char *word, char *linestart, int *want_space
254+
"complete word", GList * of char *s, WINDOW_REC, char *word, char *linestart, int *want_space
255255

256256
fe-common-core.c:
257257
"irssi init read settings"
@@ -285,6 +285,8 @@ keyboard.c:
285285

286286
printtext.c:
287287
"print text", TEXT_DEST_REC *dest, char *text, char *stripped
288+
"print format", THEME_REC *theme, char *module, TEXT_DEST_REC *dest, formatnum_args
289+
"print noformat", TEXT_DEST_REC *dest, char *text
288290

289291
themes.c:
290292
"theme created", THEME_REC

src/fe-common/core/fe-log.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,10 +570,10 @@ static void sig_print_format(THEME_REC *theme, const char *module,
570570

571571
str = format_get_text_theme_charargs(log_theme, module, dest,
572572
GPOINTER_TO_INT(formatnum), args);
573-
skip_next_printtext = TRUE;
573+
if (str != NULL && *str != '\0') {
574+
skip_next_printtext = TRUE;
574575

575-
if (*str != '\0') {
576-
/* add the line start format */
576+
/* add the line start format */
577577
linestart = format_get_level_tag(log_theme, dest);
578578
tmp = str;
579579
str = format_add_linestart(tmp, linestart);

src/fe-common/core/formats.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,9 @@ char *format_get_text_theme_charargs(THEME_REC *theme, const char *module,
650650
MODULE_THEME_REC *module_theme;
651651
char *text;
652652

653+
if (module == NULL)
654+
return NULL;
655+
653656
module_theme = g_hash_table_lookup(theme->modules, module);
654657
if (module_theme == NULL)
655658
return NULL;

src/fe-text/textbuffer-formats.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC
124124
if (!scrollback_format)
125125
return;
126126

127+
if (module == NULL)
128+
return;
129+
127130
info = store_lineinfo_tmp(dest);
128131

129132
formatnum = GPOINTER_TO_INT(formatnump);

src/perl/common/Core.xs

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,15 @@ static void add_tuple(gpointer key_, gpointer value_, gpointer user_data)
6868
(void) hv_store(hash, key, strlen(key), new_pv(value), 0);
6969
}
7070

71-
static void wrap_signal_emit(void *signal, void **p) {
72-
signal_emit(signal, 6, p[0], p[1], p[2], p[3], p[4], p[5]);
71+
static void wrap_signal_emit(void *signal, int params, void **p)
72+
{
73+
signal_emit(signal, params, p[0], p[1], p[2], p[3], p[4], p[5]);
7374
}
7475

75-
static void wrap_signal_continue(void *dummy, void **p) {
76+
static void wrap_signal_continue(void *dummy, int params, void **p)
77+
{
7678
(void)dummy;
77-
signal_continue(6, p[0], p[1], p[2], p[3], p[4], p[5]);
79+
signal_continue(params, p[0], p[1], p[2], p[3], p[4], p[5]);
7880
}
7981

8082
MODULE = Irssi::Core PACKAGE = Irssi
@@ -85,33 +87,14 @@ signal_emit(signal, ...)
8587
char *signal
8688
CODE:
8789
int signal_id;
88-
SV *args[SIGNAL_MAX_ARGUMENTS];
89-
int n, used;
9090

9191
signal_id = signal_get_uniq_id(signal);
92-
used = items - 1;
93-
if (used > SIGNAL_MAX_ARGUMENTS) {
94-
used = SIGNAL_MAX_ARGUMENTS;
95-
}
96-
for (n = 0; n < used; ++n) {
97-
args[n] = ST(n + 1);
98-
}
99-
perl_signal_args_to_c(wrap_signal_emit, signal, signal_id, args, used);
92+
perl_signal_args_to_c(wrap_signal_emit, signal, signal_id, &ST(1), items - 1);
10093

10194
void
10295
signal_continue(...)
10396
CODE:
104-
SV *args[SIGNAL_MAX_ARGUMENTS];
105-
int n, used;
106-
107-
used = items;
108-
if (used > SIGNAL_MAX_ARGUMENTS) {
109-
used = SIGNAL_MAX_ARGUMENTS;
110-
}
111-
for (n = 0; n < used; ++n) {
112-
args[n] = ST(n);
113-
}
114-
perl_signal_args_to_c(wrap_signal_continue, NULL, signal_get_emitted_id(), args, used);
97+
perl_signal_args_to_c(wrap_signal_continue, NULL, signal_get_emitted_id(), &ST(0), items);
11598

11699
void
117100
signal_add(...)
@@ -162,7 +145,7 @@ PREINIT:
162145
HV *hv;
163146
HE *he;
164147
I32 len, pos;
165-
const char *arr[7];
148+
const char *arr[SIGNAL_MAX_ARGUMENTS + 1];
166149
CODE:
167150
if (items != 1 || !is_hvref(ST(0)))
168151
croak("Usage: Irssi::signal_register(hash)");
@@ -179,7 +162,8 @@ CODE:
179162

180163
av = (AV *) SvRV(val);
181164
len = av_len(av)+1;
182-
if (len > 6) len = 6;
165+
if (len > SIGNAL_MAX_ARGUMENTS)
166+
len = SIGNAL_MAX_ARGUMENTS;
183167
for (pos = 0; pos < len; pos++) {
184168
SV **val = av_fetch(av, pos, 0);
185169
arr[pos] = SvPV_nolen(*val);

src/perl/get-signals.pl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
$signal = $1;
1717
$_ = $3;
1818
19-
s/GList \* of ([^,]*)/glistptr_\1/g;
20-
s/GSList of (\w+)s/gslist_\1/g;
19+
s/GList \* of ([^,]*)s/glistptr_\1/g;
20+
s/GSList of ([^,]*)s/gslist_\1/g;
2121
2222
s/char \*[^,]*/string/g;
2323
s/ulong \*[^,]*/ulongptr/g;
2424
s/int \*[^,]*/intptr/g;
2525
s/int [^,]*/int/g;
2626
27+
2728
my %map = (
2829
# core
2930
CHATNET_REC => 'iobject',

0 commit comments

Comments
 (0)