1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Add -out parameter to /CAT

Change flag to -window

Updated help

Typo

call printtext with server

Only use server when target is not NULL
This commit is contained in:
vague666 2019-03-22 12:30:46 +01:00
parent 6933134352
commit d45993dba4
2 changed files with 18 additions and 8 deletions

View File

@ -5,19 +5,22 @@
%9Parameters:%9 %9Parameters:%9
-window: Displays the output in the active window.
The file to display and optionally a position to seek in the file, The file to display and optionally a position to seek in the file,
in bytes. in bytes.
%9Description:%9 %9Description:%9
Displays the contents of the specified file into the active window. Displays the contents of the specified file in the active window if -window
is specified, otherwise to the closest matching window depending on levels.
The seek position parameter is used internally to display away logs, if The seek position parameter is used internally to display away logs, if
omitted the whole file is shown. omitted the whole file is shown.
%9Examples:%9 %9Examples:%9
/CAT /etc/network/interfaces /CAT -window /etc/network/interfaces
/CAT /home/mike/resume.txt /CAT /home/mike/resume.txt
/CAT contact_details.txt /CAT contact_details.txt

View File

@ -114,10 +114,11 @@ static void cmd_version(char *data)
} }
} }
/* SYNTAX: CAT <file> [<seek position>] */ /* SYNTAX: CAT [-window] <file> [<seek position>] */
static void cmd_cat(const char *data) static void cmd_cat(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
{ {
char *fname, *fposstr; char *fname, *fposstr, *target;
GHashTable *optlist;
void *free_arg; void *free_arg;
int fpos; int fpos;
GIOChannel *handle; GIOChannel *handle;
@ -127,12 +128,14 @@ static void cmd_cat(const char *data)
int fd; int fd;
#endif #endif
if (!cmd_get_params(data, &free_arg, 2, &fname, &fposstr)) g_return_if_fail(data != NULL);
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS,
"cat", &optlist, &fname, &fposstr))
return; return;
fname = convert_home(fname); fname = convert_home(fname);
fpos = atoi(fposstr); fpos = atoi(fposstr);
cmd_params_free(free_arg);
#ifdef HAVE_CAPSICUM #ifdef HAVE_CAPSICUM
fd = capsicum_open_wrapper(fname, O_RDONLY, 0); fd = capsicum_open_wrapper(fname, O_RDONLY, 0);
@ -152,15 +155,18 @@ static void cmd_cat(const char *data)
return; return;
} }
target = g_hash_table_lookup(optlist, "window") != NULL ? item->name : NULL;
g_io_channel_set_encoding(handle, NULL, NULL); g_io_channel_set_encoding(handle, NULL, NULL);
g_io_channel_seek_position(handle, fpos, G_SEEK_SET, NULL); g_io_channel_seek_position(handle, fpos, G_SEEK_SET, NULL);
buf = g_string_sized_new(512); buf = g_string_sized_new(512);
while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) { while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
buf->str[tpos] = '\0'; buf->str[tpos] = '\0';
printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP | printtext(target != NULL ? server : NULL, target, MSGLEVEL_CLIENTCRAP |
MSGLEVEL_NEVER, "%s", buf->str); MSGLEVEL_NEVER, "%s", buf->str);
} }
g_string_free(buf, TRUE); g_string_free(buf, TRUE);
cmd_params_free(free_arg);
g_io_channel_unref(handle); g_io_channel_unref(handle);
} }
@ -344,6 +350,7 @@ void fe_core_commands_init(void)
signal_add("list subcommands", (SIGNAL_FUNC) event_list_subcommands); signal_add("list subcommands", (SIGNAL_FUNC) event_list_subcommands);
command_set_options("echo", "+level +window"); command_set_options("echo", "+level +window");
command_set_options("cat", "window");
} }
void fe_core_commands_deinit(void) void fe_core_commands_deinit(void)